返回列表的链表功能

时间:2016-11-13 22:53:07

标签: python linked-list

    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函数,以便它可以应用于列表中的所有值吗?非常感谢。

2 个答案:

答案 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