2016-02-29 160 views
0

我今天在leetcode上做了一些编程问题。 我试图解决的问题在此linkpython链表超时时间超过

我能解决使用下面的代码的问题:

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

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

1

在你的第二个例子,你有这三条线(我已经删除答案不相关的所有行):

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

当执行2号线,oddPointerhead都指向同一个目的。该行覆盖<that object>.next,即它覆盖head.nexthead.next的原始值现在无法挽回地丢失。

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

+0

感谢您的回答!我有一个后续问题:在这种情况下,head.next是否还有值? –