2016-02-29 161 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是否還有值? –