Reorder List

将midnode后面的node的指针反转,再从头尾两边同时遍历

注意midnode的next设为null

 1 public class Solution {
 2     public void reorderList(ListNode head) {
 3         // IMPORTANT: Please reset any member data you declared, as
 4         // the same Solution instance will be reused for each test case.
 5         int count = 0;
 6         ListNode midnode = head;
 7         ListNode runner = head;
 8         while(runner != null&&runner.next!=null)
 9         {
10             runner = runner.next.next;
11             midnode = midnode.next;
12             count++;
13         }
14         if(count < 1||midnode.next == null)
15             return;
16         
17         ListNode fastrunner = midnode.next;
18         runner = midnode;
19         while(fastrunner!=null)
20         {
21             ListNode tmp = fastrunner.next;
22             fastrunner.next = runner;
23             runner = fastrunner;
24             fastrunner = tmp;
25         }
26         ListNode frontrunner = head;
27         ListNode backrunner = runner;
28         while(frontrunner!=midnode && backrunner!=midnode)
29         {
30             ListNode tmp = backrunner.next;
31             backrunner.next = frontrunner.next;
32             frontrunner.next = backrunner;
33             frontrunner = frontrunner.next.next;
34             backrunner = tmp;
35         }
36         midnode.next = null;
37     }
38     
39 }
原文地址:https://www.cnblogs.com/jasonC/p/3415228.html