LeetCode //C - 328. Odd Even Linked List

328. Odd Even Linked List

Given the head of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list.

The first node is considered odd, and the second node is even, and so on.

Note that the relative order inside both the even and odd groups should remain as it was in the input.

You must solve the problem in O(1) extra space complexity and O(n) time complexity.

Example 1:

Input head = [1,2,3,4,5]
Output [1,3,5,2,4]

Example 2:

Input head = [2,1,3,5,6,4,7]
Output [2,3,6,7,1,5,4]

Constraints:
  • The number of nodes in the linked list is in the range [ 0 , 1 0 4 ] [0, 10^4] [0,104].
  • − 1 0 6 < = N o d e . v a l < = 1 0 6 -10^6 <= Node.val <= 10^6 −106<=Node.val<=106

From: LeetCode

Link: 328. Odd Even Linked List


Solution:

Ideas:

This function works by first checking if the head is NULL. If it's not, it creates two pointers, odd and even, which point to the first and second nodes of the list, respectively. evenHead stores the head of the even list.

The loop continues until there are no more even nodes or even nodes with a next node. Inside the loop, the odd nodes are connected to the next odd node, and similarly, the even nodes are connected to the next even node. After the end of the loop, the odd list and the even list are connected.

The final list starts with the odd nodes followed by the even nodes, as shown in your images.

Code:
c 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* oddEvenList(struct ListNode* head) {
    if (head == NULL) return NULL;
    
    struct ListNode *odd = head;
    struct ListNode *even = head->next;
    struct ListNode *evenHead = even;

    while (even != NULL && even->next != NULL) {
        odd->next = odd->next->next;
        even->next = even->next->next;
        odd = odd->next;
        even = even->next;
    }
    
    odd->next = evenHead;
    return head;
}
相关推荐
天夏已微凉5 分钟前
1.2 Linux音频系统发展历程与关键技术演进
linux·c语言·驱动开发·音视频
studyer_domi20 分钟前
Matlab B级路面激励下集中驱动、轮边驱动和主动减振车辆
算法·matlab·汽车
喝养乐多长不高1 小时前
数据结构--红黑树
java·数据结构·算法·红黑树·二叉搜索树·avl树
xindafu1 小时前
代码随想录算法训练营第三十七天-2|动态规划part2
算法·动态规划
编程绿豆侠1 小时前
力扣HOT100之链表:146. LRU 缓存
leetcode·链表·缓存
草莓熊Lotso2 小时前
【C语言】--指针超详解(二)
c语言·开发语言·经验分享·笔记
吃个早饭2 小时前
第十六届蓝桥杯大赛软件赛C/C++大学B组部分题解
c语言·c++·蓝桥杯
এ᭄画画的北北2 小时前
力扣-142.环形链表II
算法·leetcode
朝九晚五ฺ2 小时前
【算法学习】递归、搜索与回溯算法(二)
数据结构·学习·算法·深度优先
短尾黑猫2 小时前
【LeetCode 42】接雨水(单调栈、DP、双指针)
算法·leetcode