注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
这里有两种方法,第一种是我的,2000+ms,第二种是sample code,100+ms,没找到两种方法大的区别在哪里,可是performance怎么差这么大?
跪求大佬讲解。
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
# Slow, 2000+ms
def insertionSortList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None:
return head
newHead = ListNode(0)
newHead.next = head
head = head.next
newHead.next.next = None
while head is not None:
postNode = newHead.next
preNode = newHead
while postNode is not None and postNode.val < head.val:
preNode = preNode.next
postNode = postNode.next
tmpNode = head.next
preNode.next = head
head.next = postNode
head = tmpNode
return newHead.next
# Fast,100+ms
def insertionSortList(self, head):
if not head or not head.next:
return head
dummy = ListNode(0)
pre = dummy
dummy.next = head
curr = head
while curr and curr.next:
val = curr.next.val
if curr.val < val:
curr = curr.next
continue
if pre.next.val > val:
pre = dummy
while pre.next.val < val:
pre = pre.next
new = curr.next
curr.next = new.next
new.next = pre.next
pre.next = new
return dummy.next
|