Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回列表的链表函数_Python_Linked List - Fatal编程技术网

Python 返回列表的链表函数

Python 返回列表的链表函数,python,linked-list,Python,Linked List,我的add_after函数接受一个列表,如[2,1,8,2,2,4,2,5,2],以及一个值和一个新值。它会将新值添加到列表中显示的每个值中。例如: l=[2,1,8,2,2,4,2,5,2], 在(a,2,-1)之后调用add_将返回2->-1->1->8->2->-1->2->-1->4->2->-1->5->2->-1->None。它在列表中每2个之后添加-1 我的add_after函数的问题是它只将新值添加到列表中出现的第一个值 例如,如果我在列表[1,8,2,4,2,5,2]的(ll,

我的add_after函数接受一个列表,如[2,1,8,2,2,4,2,5,2],以及一个值和一个新值。它会将新值添加到列表中显示的每个值中。例如:

l=[2,1,8,2,2,4,2,5,2], 在(a,2,-1)之后调用add_将返回2->-1->1->8->2->-1->2->-1->4->2->-1->5->2->-1->None。它在列表中每2个之后添加-1

我的add_after函数的问题是它只将新值添加到列表中出现的第一个值

例如,如果我在列表[1,8,2,4,2,5,2]的(ll,2,-1)之后调用add_,它将返回1->8->2->1->4->2->5->2->None


有人能帮我修复add_after函数,以便它可以应用于列表中的所有值吗?非常感谢。

这个
break
语句打破了循环,因此它无法通过列表的其余部分

还有其他问题。代码的更正版本:

    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

下面是将列表转换为双链接列表的快速方法。通读并理解它,然后你应该能够修改它以满足你的需要

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

你能澄清你的例子吗?我不明白你是怎么得到你的链表的,或者你的参数是什么意思。如果ll=[2,1,8,2,2,4,2,5,2],在(ll,2,-1)之后添加(ll,value,new_value),调用add_after(ll,2,-1)返回2->-1->1->8->2->-1->2->-1->-1->4->2->-1->5->2->-1->non。它向每个值添加新的值。可能是重复的哦,对不起,我发布了错误的代码,我刚刚更改了它。我试图消除中断,但程序似乎卡住了。我不确定这意味着什么,你能解释更多吗?在init中,你使用“左”和“右”作为字段名。在使用“下一步”后添加。你发布的内容无法工作。可能是缺少了什么,或者你发布的内容不好。哦,我确实发布了错误的代码,很抱歉,我刚刚更改了它。我在答案中添加了你代码的更正版本。你的代码有几个问题。对不起,我以前发布了错误的代码,我只是更改了它
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