Skip to content

Commit dd1d0c1

Browse files
author
Adam Lin
committed
two singly list to solve this ploblem
1 parent 718ed55 commit dd1d0c1

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

328_oddEvenList.cpp

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* // Constructors
7+
* ListNode() : val(0), next(nullptr) {}
8+
* ListNode(int x) : val(x), next(nullptr) {}
9+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
ListNode* oddEvenList(ListNode* head) {
15+
// If the list is empty or has only one node, return it as is
16+
if(head == nullptr) return nullptr;
17+
18+
// Initialize pointers for odd and even nodes
19+
ListNode* odd = head; // Starts at the first node (odd position)
20+
ListNode* even = head->next; // Starts at the second node (even position)
21+
ListNode* evenHead = even; // Save the head of the even list to attach later
22+
23+
/* Initial State:
24+
*
25+
* [1] -> [2] -> [3] -> [4] -> [5] -> NULL
26+
* ^ ^
27+
* odd even
28+
*
29+
* evenHead points to [2]
30+
*/
31+
32+
// Loop until there are no more even nodes
33+
while(odd->next != nullptr && even->next != nullptr){
34+
// Link current odd node to the next odd node
35+
odd->next = even->next;
36+
odd = odd->next; // Move odd pointer to the next odd node
37+
38+
/* After updating odd pointers:
39+
*
40+
* [1] -> [3] -> [4] -> [5] -> NULL
41+
* ^
42+
* odd
43+
*
44+
* [2] -> [3] (still, but will be updated next)
45+
* evenHead points to [2]
46+
*/
47+
48+
// Link current even node to the next even node
49+
even->next = odd->next;
50+
even = even->next; // Move even pointer to the next even node
51+
52+
/* After updating even pointers:
53+
*
54+
* [1] -> [3] -> [4] -> [5] -> NULL
55+
* ^
56+
* odd
57+
*
58+
* [2] -> [4] -> [5] -> NULL
59+
* ^
60+
* even
61+
*
62+
* evenHead points to [2]
63+
*/
64+
}
65+
66+
// Attach the even list to the end of the odd list
67+
odd->next = evenHead;
68+
69+
/* Final State:
70+
*
71+
* [1] -> [3] -> [5] -> [2] -> [4] -> NULL
72+
* ^ ^
73+
* head evenHead
74+
*/
75+
76+
// Return the head of the rearranged list
77+
return head;
78+
}
79+
};

0 commit comments

Comments
 (0)