2017-09-27 63 views
0

我想從堆棧中彈出一個項目(使用鏈接列表作爲與數組相反的對象)。我首先創建了一個帶有3個節點的LinkedList類,其值爲[1,2,3]。所以我想彈出最後一個節點(node_C,value = 3),因此我期望看到值[1,2]。相反,沒有打印出來。使用鏈表的堆棧彈出 - Python

class LinkedList: 
    def __init__(self, value): 
     self.value = value 
     self.next = None 

node_A = LinkedList(1) 
node_B = LinkedList(2) 
node_C = LinkedList(3) 

node_A.next = node_B 
node_B.next = node_C 

def pop(head): 
    current_node = head 
    while current_node.next: 
     if current_node.next == None: 
      break 
     else: 
      current_node = current_node.next 

del current_node 

return node_A.value, node_B.value, node_C.value 

try: 
    print(pop(node_A)) 
except NameError: 
    pass 

我該如何重寫這個來實現我想要的結果(即顯示值1,2 ..並彈出3)?

+0

你在哪裏調用pop()方法,我沒有看到它被調用的任何地方 – zenwraight

+0

最後4行代碼 – user3062459

回答

1

del current nodereturn node_A.value, node_B.value, node_C.value 命令應該屬於pop函數,所以它們應該是有意的。但無論如何,del current node不適合我。相反,您可以編寫current_node.value = None,但您仍然返回所有3個節點值,因此結果將爲1,2,None

我寧願寫在類中的流行功能並添加另一個的printList功能以班級爲好。 pop函數只是從列表中刪除最後一個元素(將列表中第二個元素的下一個屬性更改爲None),並且不打印或返回任何內容。函數遍歷列表並打印出所有元素(當存在下一個元素時)。這裏是我的代碼:

class LinkedList: 
    def __init__(self, value): 
     self.value = value 
     self.next = None 

    def pop(self): 
     current_node = self 
     while current_node.next: 
      if current_node.next.next == None: 
       current_node.next = None 
      else: 
       current_node = current_node.next 

    def printlist(self): 
     current_node = self 
     lst = [current_node.value] 
     while current_node.next: 
      current_node = current_node.next 
      lst.append(current_node.value) 
     print lst 


node_A = LinkedList(1) 
node_B = LinkedList(2) 
node_C = LinkedList(3) 

node_A.next = node_B 
node_B.next = node_C 

try: 
    node_A.pop() 
    node_A.printlist() 
except NameError: 
    pass 

如果我運行這個,結果是[1,2]。如果我刪除了node_A.pop(),我會得到[1,2,3]。如果我寫另一個node_A.pop(),那麼結果是[1]

+0

工程太棒了!謝謝 – user3062459

1

我想我已經發現你的邏輯的問題,所以根據提供的代碼看來,彈出功能不返回任何東西,可能只是格式化或其他。

但這裏是你的代碼,在這裏我只是刪除最後一個節點在pop方法的正確版本,我打電話叫listValues另一種方法,它返回我與存在鏈表彈出後的節點值

請看下面的實現以獲得更清晰的視圖。

class LinkedList: 
    def __init__(self, value): 
     self.value = value 
     self.next = None 

node_A = LinkedList(1) 
node_B = LinkedList(2) 
node_C = LinkedList(3) 

node_A.next = node_B 
node_B.next = node_C 

def pop(head): 
    current_node = head 
    while current_node.next: 
     if current_node.next == None: 
      del current_node 
      break 
     else: 
      current_node = current_node.next 

def listValues(head): 
    values = [] 
    current_node = head 
    while current_node.next: 
    values.append(current_node.value) 
    current_node = current_node.next 
    return values 

try: 
    pop(node_A) 
    print(listValues(node_A)) 
except NameError: 
    pass 

希望這有助於!

+0

謝謝,但我試圖從使用「鏈接列表」對象堆棧。你的解決方案使用一個數組(即list.append)。 – user3062459

+0

仔細查看pop方法做它需要做的事情,listValues方法只是用於打印值 – zenwraight

+0

pop方法刪除鏈表中的最後一個元素,我使用另一個輔助方法列出當前值在鏈表中列表可能會增長到100左右 – zenwraight