Odd Even Linked List
Medium
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
题意
给定一个链表,将其重排序,使得奇数位的节点放在前面,偶数位的节点在后面
思路
设置奇数头oddhead, 偶数头evenhead, 奇数指针odd和偶数指针even. 注意最后要将even.next置为null避免链表无限循环。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode oddEvenList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode oddhead = new ListNode(-1), evenhead = new ListNode(0), odd = oddhead, even = evenhead;
int cnt = 1;
while (head != null) {
if ((cnt & 1) == 0) {
even.next = head;
even = even.next;
} else {
odd.next = head;
odd = odd.next;
}
head = head.next;
++cnt;
}
odd.next = evenhead.next;
even.next = null;
return oddhead.next;
}
}