2017-07-26 70 views
-4
#Creates a new Node 
#nextnode acts as a pointer  
class Node(object): 
     def __init__(self,data): 
      self.data = data 
      self.nextnode = None 
    class LinkedList(object): 
     def __init__(self): 
      self.head = None 
      self.size =0 
    #Insertion 
Adding elements at start and end of linked list 

     def insertStart(self,data): 
      self.size+=1 
      newnode = Node(data) 
      if not self.head: 
       self.head = newnode 
      else: 
       newnode.nextnode = self.head 
       self.head = newnode 
     def size(self): 
      return self.size 



     def insertEnd(self,data): 
      self.size+=1 
      newnode = Node(data) 
      actualnode = self.head 
      while actualnode is not None: 
       actualnode = actualnode.nextnode #Eroor here!!!! 
      actualnode.nextnode = newnode 

     #Traversing through linked list 
     def traverse(self): 
      actualnode = self.head 
      while actualnode is not None: 
       print("Actual Node {}".format(actualnode.data)) 
       actualnode = actualnode.nextnode 

    #Removing node 
     def remove(self,data): 
      if (self.head == None): 
       return 
      currentnode = self.head 
      previousnode = None 
      while (currentnode.data != data): 
       previousnode = currentnode 
       currentnode = currentnode.nextnode 
      if previousnode is None: 
       self.head = currentnode.nextnode 
      else: 
       previousnode.nextnode = currentnode.nextnode 

    linkedlist = LinkedList() 
    linkedlist.insertStart(12) 
    linkedlist.insertStart(13) 
    linkedlist.insertStart(14) 
    linkedlist.insertStart(15) 
    linkedlist.insertEnd(16) 
    linkedlist.traverse() 
+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。 我們應該能夠將發佈的代碼粘貼到文本文件中,並重現您描述的問題。 – Prune

+1

你能否更詳細地描述你的問題,並提供一個如何運行你的代碼來重現錯誤(只有你到目前爲止)看到的例子? –

+0

歡迎來到Stack Overflow!你能詳細說明你的代碼「不起作用」嗎?你在期待什麼,究竟發生了什麼?如果您遇到異常/錯誤,請發佈其發生的行和異常/錯誤的詳細信息。請[編輯]這些細節或我們可能無法提供幫助。 –

回答

0

insertEnd,你保證你總是有Noneactualnode在循環的末尾:

def insertEnd(self, data): 
    self.size += 1 
    newnode = Node(data) 
    actualnode = self.head 

    # Keep going until actualnode is None 
    while actualnode is not None: 
     actualnode = actualnode.nextnode 

    # Here actualnode will always be None 
    actualnode.nextnode = newnode 

爲了解決這個問題,只是改變你的while循環的條件:

while actualnode.nextnode is not None: 
    actualnode = actualnode.nextnode 

請注意,這假設self.head始終爲非None。你應該明確地檢查這種情況。可能是這樣的:

def insertEnd(self, data): 
    self.size += 1 
    newnode = Node(data) 
    if self.head is None: 
     self.head = newnode 
    else: 
     actualnode = self.head 
     while actualnode.nextnode is not None: 
      actualnode = actualnode.nextnode 
     actualnode.nextnode = newnode