class LN:
def __init__(self,value,next=None):
self.value = value
self.next = next
def add_after(ll,value,new):
item = ll
while item is not None:
if item.value == value:
newnode = LN(new, item.next)
item.next = newnode
break
else:
item = item.next
我的add_after函数采用[2,1,8,2,2,4,2,5,2]等列表,以及一个值和一个新值。它将新值添加到列表中显示的每个值。例如:
l = [2,1,8,2,2,4,2,5,2], 调用add_after(a,2,-1)返回2-> -1-> 1-> 8-> 2-> -1-> 2-> -1-> 4-> 2→-1-> 5→2→-1->无。它在列表中每2个后添加-1
我的add_after函数的问题是它只将新值添加到列表中显示的第一个值。
例如,如果我将add_after(ll,2,-1)调用到列表[1,8,2,4,2,5,2],则返回1-> 8-> 2-> ; -1-将4-> 2→5→2→无
有人可以帮我修复我的add_after函数,以便它可以应用于列表中的所有值吗?非常感谢。
答案 0 :(得分:1)
break
语句会中断循环,因此它不会通过列表的其余部分。
还有其他问题。代码的更正版本:
class TN:
def __init__(self,value,next=None):
self.value = value
self.next = next
def add_after(self, value, new):
item = self
while item is not None:
if item.value == value:
newnode = TN(new, item.next)
item.next = newnode
item = newnode.next
else:
item = item.next
答案 1 :(得分:1)
以下是将列表转换为双向链表的快速方法。仔细阅读并理解它,然后您应该能够根据自己的需要进行修改。
def link_list(l):
if not l:
return None
head = TN(l[0])
prev = head
for val in l[1:]:
curr = TN(val, prev)
prev.right = curr
prev=curr
return head