LeetCode #328 Odd Even Linked List

Medium

Len Chen
1 min readSep 17, 2018

Problem

Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.

You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity.

Example 1:

Input: 1->2->3->4->5->NULL
Output: 1->3->5->2->4->NULL

Example 2:

Input: 2->1->3->5->6->4->7->NULL
Output: 2->3->6->7->1->5->4->NULL

Note:

  • The relative order inside both the even and odd groups should remain as it was in the input.
  • The first node is considered odd, the second node even and so on …

Solution

Use two pointers for tracking tails of odd list and even list. In each iteration, we have:

  1. New odd tail is the next node of old even tail
  2. New even tail is the next node of new odd tail

It’s noted to make sure even tail and the next node of even tail exist.

Complexity

At each iteration we will jump two nodes for assigning new odd and even tail. So time complexity is O(n/2) = O(n) if n denotes to counts of nodes in this linked list.

It’s trivial that it only uses O(1) extra space.

--

--

Len Chen
Len Chen

No responses yet