题解 | #重排链表#
重排链表
http://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b
左右指针,平民解法,欢迎指正。
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public void reorderList(ListNode head) {
/*
1L-2-3-4-5-6R
1L 6R-2-3-4-5
1 6R 2L 3 4 5
1 6 2L 3 4 5R
1 6 2L 5R 3 4
1 6 2 5R 3L 4
1 6 2 5 3L 4R
*
1L 2 3 4 5R
1L 5R 2 3 4
1 5L 2 3 4R
1 5 2L 3 4R
1 5 2L 4R 3
1 5 2 4R 3L
1 5 2 4 3LR
1L-2-3R
1L-3R-2
1 3R 2L
1 3 2LR
* */
//0
if(head == null){
return;
}
ListNode left = head;
ListNode right = head;
ListNode preLast = head;
//使right在尾部
while(right.next != null){
preLast = right;
right = right.next;
}
while (!(left == right || left.next == right)){
right.next = left.next;
left.next = right;
preLast.next = null;//新尾部
left = right.next;
//使right一直在尾部
while(right.next != null){
preLast = right;
right = right.next;
}
}
}
}