[鏈表]leetcode328:奇偶鏈表(medium)

題目:
在這裏插入圖片描述
題解:

  • 思路:很簡單,原地算法,直接遍歷改變奇偶節點之間的鏈接就好了。
  • 1)每次循環,將奇數節點鏈接到偶數節點的next節點,同時更新偶數節點;偶數節點鏈接奇數節點的next節點,同時更新偶數節點。
  • 2)在偶數節點爲尾節點或者空節點時,循環退出。這時需要把奇數節點的尾節點鏈接上偶數節點的頭節點即可,這樣就完成重裝鏈表了。

代碼如下:

class Solution {
public:
    //思路:原地算法,時間複雜度O(n),空間複雜度O(1)
    ListNode* oddEvenList(ListNode* head) {
        //頭節點爲空或者只有一個節點,直接返回head節點
        if(!head||!head->next)return head;
        //奇數節點、偶數節點以及保存偶數節點的頭節點的初始化
        ListNode *odd=head,*even=head->next,*evenHead=even;
        while(even&&even->next){//even爲尾節點或者尾節點時,循環退出
            //奇數節點鏈接偶數節點的next節點,同時更新偶數節點
            odd->next=even->next;
            odd=odd->next;
            //偶數節點鏈接奇數節點的next節點,同時更新偶數節點
            even->next=odd->next;
            even=even->next;
        }
        //奇數節點的尾節點鏈接偶數節點的頭節點
        odd->next=evenHead;
        return head;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章