我今天在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不能这样做。
答案 0 :(得分:1)
在你的第二个例子中,你有这三行(我删除了与答案无关的所有行):
oddPointer = head
oddPointer.next = evenPointer.next
oddPointer = head.next
执行第2行时,oddPointer
和head
都引用同一个对象。该行会覆盖<that object>.next
,即它会覆盖head.next
。 head.next
的原始价值现在已经无可挽回地丢失了。
在您的第一个示例中,您隐藏了head.next
变量中temp
的原始值,因此您可以稍后检索它。
答案 1 :(得分:0)
我做了一些测试,发现代码中有一个无限循环导致时间限制超过错误。在我的代码中:oddPointer.next = head.next
这一行总是指向自己。