这道题目的思路同样也比较巧妙,在这道题目的解法中,我们并不是一个一个地去移动node,而是分别将odd nodes和even nodes串成两个Linked List,然后再将odd list尾部的next结点指向even nodes结点的头部即可,图片分析如下:
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode oddEvenList(ListNode head) {
if(head == null || head.next == null) return head;
ListNode odd = head;
ListNode even = head.next;
ListNode evenHead = even;
while(even != null && even.next != null){
odd.next = odd.next.next;
even.next = even.next.next;
odd = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
}
知识点:
1. 这种将原Linked List分成两个Linked Lists然后再对其进行操作的方法非常巧妙,要记录一下