我在下面删除链接列表中的节点的代码不起作用,因为它删除了我想要删除的索引的错误索引。
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?我很困惑,为什么会发生这种情况?
答案 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,所以我无法测试代码,但希望以这种方式分解它会有所帮助。