Advertisement
jayati

Odd Even Linked List

May 7th, 2024
488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. /**
  2.  * Definition for singly-linked list.
  3.  * struct ListNode {
  4.  *     int val;
  5.  *     ListNode *next;
  6.  *     ListNode() : val(0), next(nullptr) {}
  7.  *     ListNode(int x) : val(x), next(nullptr) {}
  8.  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
  9.  * };
  10.  */
  11. class Solution {
  12. public:
  13.     ListNode* oddEvenList(ListNode* head) {
  14.         if (head == nullptr || head->next == nullptr) {
  15.             return head; // No need to process if there are 0 or 1 nodes
  16.         }
  17.  
  18.         ListNode* odd = head;
  19.         ListNode* even = head->next;
  20.         ListNode* evenHead = even; // Keep track of the start of even nodes
  21.         int i = 0;
  22.  
  23.         while (odd->next != nullptr && even->next != nullptr) {
  24.             if (i % 2 == 0) {
  25.                 odd->next = odd->next->next;
  26.                 if (odd->next != nullptr) {
  27.                     odd = odd->next;
  28.                 }
  29.             } else {
  30.                 even->next = even->next->next;
  31.                 if (even->next != nullptr) {
  32.                     even = even->next;
  33.                 }
  34.             }
  35.             i++;
  36.         }
  37.  
  38.         odd->next = evenHead; // Connect odd list with even list
  39.         if (even != nullptr) {
  40.             even->next = nullptr; // Terminate the even list
  41.         }
  42.  
  43.         return head;
  44.     }
  45. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement