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 ...


奇偶链表。题意是给一个链表,请按照node顺序的奇偶性重新排列,奇数在前,偶数在后。

注意不是按照node.val而是按照node的顺序。

时间O(n)

空间O(1)

 

 

解题思路:

申请奇偶节点变量

注意区分奇偶头节点和奇偶当前处理节点的关系

奇节点的下一个节点是偶节点的下一个节点,当前奇节点来到当前处理节点,偶节点的下个节点是奇节点的下一个节点

处理完后,奇偶链表相连起来

 



class Solution {
public ListNode oddEvenList(ListNode head) {
if(head==null || head.next==null){
return head;
}

ListNode oddHead=head;
ListNode evenHead=head.next;
ListNode curOdd=head;
ListNode curEven=head.next;
while(curOdd.next!=null && curEven.next!=null){
curOdd.next=curEven.next;
curOdd=curOdd.next;
curEven.next=curOdd.next;
curEven=curEven.next;
}
curOdd.next=evenHead;
return oddHead;

}
}