题目:
Sort a linked list using insertion sort.
大意是要实现一个链表的插入排序
算法思路:
从原链表中逐个弹出一个node
对于每一个node用插入排序的思想插入新的升序排列的链表中
这里有一个小trick,leetcode有一组数据是1~4999的升序序列,如果我们采用如上方法会超时
于是我们在插入排序的时候设置一个last位,记录当前插入的位置
在下一次插入的时候与上次插入位置last比较,如果当前node.val > last.val,那么我们只有从last开始查找即可,因为前面的节点val都比node节点val小,没有查找的必要。
代码:
class Solution(object): def addInList(self, head, last, node): iterator = head if last.val <= node.val: iterator = last while iterator.next: if iterator.next.val > node.val: node.next = iterator.next iterator.next = node return iterator iterator = iterator.next iterator.next = node return iterator def insertionSortList(self, head): """ :type head: ListNode :rtype: ListNode """ if head == None or head.next == None: return head start = ListNode(-2147483648) last = start while head: next = head.next head.next = None last = self.addInList(start, last, head) head = next return start.next
时间: 2024-10-17 22:16:12