Skip to content

Latest commit

 

History

History
28 lines (23 loc) · 1.04 KB

328. Odd Even Linked List.md

File metadata and controls

28 lines (23 loc) · 1.04 KB

思路

题给定一个链表,要重新排列链表,要求所有奇节点在前,偶节点在后。 我们可以用两个奇偶指针odd和even分别指向奇偶节点,初始分别为headhead->next,从前往后将奇节点和偶节点分别串起来。另外需要一个单独的指针even_head来保存偶节点的起点位置,因为最后 需要将偶节点链表接在奇节点链表后。

C++

class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        if(!head) return head;
        
        ListNode *odd  = head, *even = head -> next, *even_head = even;
        
        while(even && even -> next){
            odd -> next = odd -> next -> next; // 将奇节点串起来
            even -> next = even -> next -> next; // 将偶节点串起来
            odd = odd -> next; // 工作指针右移
            even = even -> next; // 工作指针右移
        }
        odd -> next = even_head;
        return head;
    }
};