Insertion Sort List
Sort a linked list using insertion sort.
原题链接为: https://leetcode.com/problems/insertion-sort-list
分析:
使用插入排序对链表进行排序。
可以新建一个带头节点的有序链表,每次从原链表中选择一个节点,插入到带头节点的链表中。
C++代码:
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
ListNode dummy = ListNode(-1);
ListNode * cur = head, *p, *pnext, *t;
while(cur){
p = &dummy;
while(p->next && cur->val > p->next->val){
p = p->next;
}
pnext = p->next;
p->next = cur;
t = cur->next;
cur->next = pnext;
cur = t;
}
return dummy.next;
}
};
Python的代码不知道为什么一直TLE。
先贴上,等回头再过来改。
20190227: 试了下代码AC了,并简单修改了下代码:
class Solution(object):
def insertionSortList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
cur = head
# dummy是新的链表表头
dummy = ListNode(-1)
while cur:
p = dummy
while p.next and cur.val > p.next.val:
p = p.next
t = cur.next
cur.next = p.next
p.next = cur
cur = t
return dummy.next
时间优化:上述代码运行速度较慢,打败了30多的submission,想到了一个优化方案,用指针记录新链表的head、end和上一次插入的节点lastinsert三个节点,对于新的节点,先和这三个节点作比较,再插入节点。此时平均可以减少一半的比较次数。