[链表]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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章