LeetCode OJ - Insertion Sort List

这道题较简单,这里不多说,下面是AC的代码:

 1 /**
 2      * 插入排序的算法比较简单,我看wiki上,当要在已排序列表中插入一个元素时,是从后到前遍历,
 3      * 由于链表只能从前往后遍历,所以我采用从后到前。
 4      * 要注意的地方就是找到位置时,处理链表的元素插入的具体细节
 5      * @param head
 6      * @return
 7      */
 8     public ListNode insertionSortList(ListNode head){
 9         //当链表为空或者只有一个节点的情况
10         if(head == null || head.next == null)
11             return head;
12         
13         ListNode newHead = head;//记录新的链表头
14         ListNode p1 = head, pp1= null, pointer,pPointer = head, temp = null;
15         for( pointer = head.next;pointer!=null;pointer = temp)
16         {
17             pp1 = null;
18             p1 = newHead;
19             while(p1!= pointer && p1.val<=pointer.val)
20             {
21                 pp1 = p1;
22                 p1 = p1.next;
23             }
24             temp = pointer.next;
25             
26             if(pp1 == null)
27             {
28                 pointer.next = p1;
29                 newHead = pointer;
30                 pPointer.next = temp;
31             }else if(p1 != pointer){
32                 pPointer.next = pointer.next;
33                 pp1.next = pointer;
34                 pointer.next = p1;
35             }
36             else
37                 pPointer = pPointer.next;
38             
39         }
40         return newHead;
41     }

 

posted @ 2014-04-22 15:28  echoht  阅读(120)  评论(0编辑  收藏  举报