这道题真的让我收获蛮大的,代码如下,注释都写在里面:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode oddEvenList(ListNode head) {
// Corner case
if(head == null){
return head;
}
// head -> odd, evenHead -> even
ListNode odd = head;
ListNode evenHead = head.next;
ListNode even = head.next;
// When the number of nodes is odd,
// our exit condition is even == null
// When the number of nodes is even,
// our exit condition is even.next == null
while(even != null && even.next != null){
// Skip the following even node
odd.next = even.next;
// Odd moves forward one step
odd = odd.next;
// Skip the following odd node
even.next = odd.next;
// Even moves forward one step
even = even.next;
}
odd.next = evenHead;
return head;
}
}