143. 重排链表
 

 
自己做
 

 
解:归并
 
/*** 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 p = head;                      //快指针ListNode q = head;                      //慢指针while(p.next != null){p = p.next.next;                    //走两格q = q.next;                         //走一格if(p == null)                       //偶数走到终点break;}//令p指向后半段链表的开端p = q.next;q.next = null;//反转后半段链表q = new ListNode();ListNode r = p;while(p != null){p = p.next;r.next = q.next;q.next = r;r = p;}//归并p = head;r = head;int sum = 0;q = q.next;while(p != null){sum++;if(sum % 2 == 0 && q != null){r.next = q;q = q.next;r = r.next;r.next = p;}else{r = p;p = p.next;}}r.next = q;}
}
 
