leetcode147 Insertion Sort List

 1 """
 2 链表插入排序
 3 """
 4 """
 5 难点在于设计链表,插入排序时如何找到插入位置,并恢复好下一个遍历结点的位置
 6 所以需要两个while循环,第一个是整体遍历,第二个是找插入位置
 7 """
 8 class ListNode:
 9     def __init__(self, x):
10         self.val = x
11         self.next = None
12 
13 class Solution:
14     def insertionSortList(self, head):
15         if not head or not head.next:
16             return head
17         first = ListNode(0)
18         first.next = head  # 本题用三个指针来操作
19         pre = head
20         cur = head.next
21         while cur:
22             if pre.val < cur.val:  # 如果有序,向后遍历
23                 pre = cur
24                 cur = cur.next
25             else:
26                 pre.next = cur.next  # 保存下一个要遍历的位置
27                 insert = first  # 用指针在前面找插入位置
28                 while insert.next and insert.next.val < cur.val:  # 找到插入位置
29                     insert = insert.next
30                 cur.next = insert.next  # 插入结点
31                 insert.next = cur
32                 cur = pre.next  # 指针归位
33         return first.next

 

posted @ 2020-02-17 22:43  yawenw  阅读(95)  评论(0编辑  收藏  举报