【LeetCode328】奇偶链表

简介: 时间复杂度O(n)即遍历一遍链表,奇偶指针odd循环链表,奇数指针不断串连奇数节点,偶数指针even不断串连偶数节点,最后奇数指针的结尾连接偶数节点的开始。

一、题目


image.png

二、思路

时间复杂度O(n)即遍历一遍链表,奇偶指针odd循环链表,奇数指针不断串连奇数节点,偶数指针even不断串连偶数节点,最后奇数指针的结尾连接偶数节点的开始。


根据偶数指针进行while条件判断,注意为了确定本轮次的奇数链表存在下一个新节点,所以在while判断还要加上even->next != NULL。

        while(even != NULL && even->next != NULL){
            odd->next = even->next;
            odd = odd->next;
            even->next = odd->next;
            even = even->next;
        }

第一轮循环后:

image.png

三、C++代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        if(head == NULL){
            return head;
        }
        //偶数第一个节点
        ListNode* evenhead = head->next;
        ListNode* odd = head;
        ListNode* even = head->next;
        while(even != NULL && even->next != NULL){
            odd->next = even->next;
            odd = odd->next;
            even->next = odd->next;
            even = even->next;
        }
        odd->next = evenhead;
        return head;
    }
};
相关文章
|
存储 索引
【Leetcode -141.环形链表 -2.两数相加】
【Leetcode -141.环形链表 -2.两数相加】
27 0
|
算法 索引
【Leetcode -328.奇偶链表 - 725.分隔链表】
【Leetcode -328.奇偶链表 - 725.分隔链表】
35 0
LeetCode | 234. 回文链表
LeetCode | 234. 回文链表
|
6月前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
42 4
|
6月前
|
索引
【力扣刷题】回文链表、环形链表、合并两个有序链表
【力扣刷题】回文链表、环形链表、合并两个有序链表
38 0
|
6月前
leetcode2807.在链表中插入最大公约数
leetcode2807.在链表中插入最大公约数
36 0
|
6月前
【Leetcode 2807】在链表中插入最大公约数 ——链表|数论
链表插入的基础操作:每次在原链表的相邻两个节点中插入一个新的节点,新节点的值为相邻两个节点的最大公约数,最后返回新的链表即可
|
6月前
|
算法
leetcode-328:奇偶链表
leetcode-328:奇偶链表
45 0
|
6月前
|
机器学习/深度学习
leetcode-234:回文链表
leetcode-234:回文链表
35 0
|
计算机视觉
234.回文链表(LeetCode)
234.回文链表(LeetCode)
234.回文链表(LeetCode)