求链表中间节点是可以使用这个方法,两个节点,一个每次走一步,一个每次走两步,那么最后走一次的就在中间。
不用求出总长度,在遍历到中间来求中间节点。
另外对于题目:应该先使用例子,画图,然后找边界,一直苦想很浪费时间!!!
class Solution {
public void reorderList(ListNode head) {
if(head==null || head.next==null)
return ;
ListNode p=head;
ListNode q=head;
while(q.next!=null && q.next.next!=null){
p=p.next;
q=q.next.next;
}
ListNode midhead=new ListNode(0);
midhead.next=p.next;
p=p.next;
while(p.next!=null){
ListNode temp3=p.next;
p.next=temp3.next;
temp3.next=midhead.next;
midhead.next=temp3;
}
q=head;
p=midhead.next;
while(q!=null && p!=null){
ListNode temp1=q.next;
ListNode temp2=p.next;
p.next=temp1;
q.next=p;
p=temp2;
q=temp1;
}
if(q!=null)
q.next=null;
}
public static void Print(ListNode head){
ListNode pre=head;
while(pre!=null){
System.out.print(pre.val+" ");
pre=pre.next;
}
System.out.println();
}
}