1. 找到mid
2. 对mid之后的部分进行reverse
3. 重新reorder
class Solution {
public void reorderList(ListNode head) {
if(head == null || head.next == null){
return;
}
//find mid
ListNode p1 = head;
ListNode p2 = head;
while(p2.next != null && p2.next.next != null){
p1 = p1.next;
p2 = p2.next.next;
}
//reverse sub list
ListNode mid = p1; //mid = 3
ListNode m = mid.next;
while(m.next != null){
ListNode current = m.next;
m.next = current.next;
current.next = mid.next;
mid.next = current;
}
//reorder
p1 = head; //p1=1
p2 = mid.next; //p2=
while(p1 != mid){
mid.next = p2.next;
p2.next = p1.next;
p1.next = p2;
p1 = p2.next;
p2 = mid.next;
}
}
}