/**
* 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 void reorderList(ListNode head) {
ListNode mid = find(head);
ListNode dhead = mid.next;
mid.next = null;
dhead = reverse(dhead);
ListNode a = head;
ListNode b = dhead;
while(a!=null&&b!=null){
ListNode tmp = a.next;
ListNode btmp = b.next;
a.next = b;
b.next = tmp;
a = tmp;
b = btmp;
}
}
public ListNode find(ListNode head){
ListNode fast = head.next;
ListNode slow = head;
while(fast!=null&&fast.next!=null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
public ListNode reverse(ListNode head){
ListNode pre = null;
ListNode node = head;
while(node!=null){
ListNode tmp = node.next;
node.next = pre;
pre = node;
node = tmp;
}
return pre;
}
}
思路对的,但是得从中间截取,不然head就改变了