python链表时间限制超过

时间:2016-02-29 00:14:13

标签: python list linked-list

我今天在leetcode上做了一些编程问题。 我试图解决的问题已经过了link

我能够使用以下代码解决问题:

class Solution(object):
    def oddEvenList(self, head):
        if not head:
            return head

        oddPointer = head
        evenPointer = head.next
        temp = head.next
        while evenPointer and evenPointer.next:
            oddPointer.next = evenPointer.next
            oddPointer = oddPointer.next
            evenPointer.next = oddPointer.next
            evenPointer = evenPointer.next

        oddPointer.next = temp
        return head

但是,如果我更改为以下代码,在线评委会给我一个超出时间限制的错误。我想知道这里的问题是什么。

class Solution(object):
    def oddEvenList(self, head):
        if not head:
            return head

        oddPointer = head
        evenPointer = head.next
        while evenPointer and evenPointer.next:
            oddPointer.next = evenPointer.next
            oddPointer = oddPointer.next
            evenPointer.next = oddPointer.next
            evenPointer = evenPointer.next

        oddPointer.next = head.next #this is the change
        return head

我记得我可以用Java做到这一点,但由于某种原因,python不能这样做。

2 个答案:

答案 0 :(得分:1)

在你的第二个例子中,你有这三行(我删除了与答案无关的所有行):

oddPointer = head
oddPointer.next = evenPointer.next
oddPointer = head.next

执行第2行时,oddPointerhead都引用同一个对象。该行会覆盖<that object>.next,即它会覆盖head.nexthead.next的原始价值现在已经无可挽回地丢失了。

在您的第一个示例中,您隐藏了head.next变量中temp的原始值,因此您可以稍后检索它。

答案 1 :(得分:0)

我做了一些测试,发现代码中有一个无限循环导致时间限制超过错误。在我的代码中:oddPointer.next = head.next这一行总是指向自己。