从链接列表中删除节点不起作用

时间:2016-12-27 03:56:51

标签: python linked-list

我在下面删除链接列表中的节点的代码不起作用,因为它删除了我想要删除的索引的错误索引。

jQuery.Deferred exception: this.get is not a function TypeError: this.get is not a function
at Object.<anonymous> (http://localhost:4200/assets/auction-ember.js:53:77)
at ComputedPropertyPrototype.get (http://localhost:4200/assets/vendor.js:26852:28)
at Object.get (http://localhost:4200/assets/vendor.js:31759:19)
at NestedPropertyReference.compute (http://localhost:4200/assets/vendor.js:24910:28)
at NestedPropertyReference.value (http://localhost:4200/assets/vendor.js:24720:45)
at ReferenceCache.initialize (http://localhost:4200/assets/vendor.js:55111:52)
at ReferenceCache.peek (http://localhost:4200/assets/vendor.js:55085:29)
at DynamicAttribute.flush (http://localhost:4200/assets/vendor.js:58752:35)
at SimpleElementOperations.addAttribute (http://localhost:4200/assets/vendor.js:58414:36)
at SimpleElementOperations.addDynamicAttribute (http://localhost:4200/assets/vendor.js:58374:22) undefinedjQuery.Deferred.exceptionHook @ jquery.js:3846process @ jquery.js:3642

jquery.js:3855Uncaught TypeError: this.get is not a function(…)

所以这应该删除索引1处的节点,即2,但它会删除3,并打印1,2,4甚至不打5?我很困惑,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:2)

你的删除功能太过分了。让我们一步一步,删除第一个节点(如代码中所示)。

new_n=self.head

new_n 现在指向头节点。这就是我们想要的,所以这是正确的。

count=0

将计数初始化为零。这也是正确的,因为当前节点是节点零。

while count!=index:
    new_n=new_n.next
    count+=1

这是我们得到意外行为的地方。在第一次迭代(从0!= 1开始),我们进入循环。现在new_n指向列表中的第二个元素(索引1),count 为1。

现在我们再次尝试循环条件。 count 现在等于index ,因此我们摆脱了循环。

当前new_n 现在指向列表中的第二个元素(索引1),因此new_n.next=new_n.next.next将下一个元素更改为当前下一个元素之后的元素。这是从链表中删除元素的方法,但是我们离开了一个元素(我们遍历了列表太远)。要解决此问题,请尝试以下代码:

def removenode(self,index):
   # catch the edge condition where we're removing the first node
   if index==0 
        self.head = self.head.next 
   else
      new_n=self.head
      count=1
      while count!=index:
           new_n=new_n.next
          count+=1
      new_n.next=new_n.next.next

免责声明:我在这台计算机上没有Python,所以我无法测试代码,但希望以这种方式分解它会有所帮助。