python - 返回列表的链表函数

标签 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 函数的问题是它只将新值添加到列表中出现的第一个值。

例如,如果我对列表 [1,8,2,4,2,5,2] 调用 add_after(ll,2,-1),它将返回 1->8->2->-1 ->4->2->5->2->无

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

最佳答案

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

关于python - 返回列表的链表函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40579713/

相关文章:

python - 仅使用 C 风格的 fprintf() 语句的高效数据交换格式?

python - NoReverseMatch Django 教程 1.8

go - 在 golang 中实现通用链表,它不允许在同一链表中使用不同类型

c++ - 返回类内的私有(private)类

java - 在 LinkedList 中添加一个点而不覆盖另一个点 - Java

python - feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

csv 文件上的 Python 多处理 EOF 错误

python - Cmake 无法找到 Python 库

c - 调试帮助 - 交换双向链表的 2 个节点

c - 链表错误?在C中