2017-08-20 37 views
0

嗨,這是一個鏈接列表反向代碼。任何人都可以幫助我理解r = Solution()。reverseList(n1)和r = Solution()。reverseList(ListNode(1))之間的差異。鏈接列表反向代碼中的對象變量

我想知道爲什麼分別是[1]和[3,2,1]的輸出以及將ListNode對象分配給變量的目的是什麼。

class Solution(object): 
def reverseList(self, head): 
    """ 
    :type head: ListNode 
    :rtype: ListNode 
    """ 
    #if not head: 
    # return None 
    prev = head 
    curr = prev.next 
    while curr: 
     next =curr.next 
     curr.next = prev 
     prev = curr 
     curr = next 
    head.next = None 
    return prev 




class ListNode(object): 
    def __init__(self,x): 
     self.val = x 
     self.next = None 
    def to_list(self): 
     return[self.val] + self.next.to_list() if self.next else [self.val] 

if __name__ == "__main__": 
    n1 = ListNode(1) 
    n2 = ListNode(2) 
    n3 = ListNode(3) 
    n1.next = n2 
    n2.next = n3 
    r = Solution().reverseList(n1) 
    print r.to_list() 
    #assert r.to_list() == [3,2,1] 

回答

0

我現在明白了。 (1)沒有「下一個」集合,所以它將永遠返回1,因爲它是列表,而n1以相同方式開始(只是1的節點),但「下一個」屬性設置爲節點2的「下一個」設置爲3的節點,所以n1攜帶所有這些信息,而ListNode(1)沒有。

歡迎任何評論。

0

我現在遇到另一個問題。爲什麼它打印不同的結果?

if __name__ == "__main__": 
    n1 = ListNode(1) 
    n2 = ListNode(2) 
    n3 = ListNode(3) 
    n1.next = n2 
    n2.next = n3 
    r = Solution().reverseList(n1) 
    print r.to_list() 
    print Solution().reverseList(n1).to_list() 

[3,2,1]

[1]