添加到链接列表

时间:2014-12-14 00:10:06

标签: python linked-list

我尝试编写一个带有三个参数的函数:链表,值和新值。该函数的目的是在链表中的值之后添加新值。这是我的职责。

def addAfter(lis, value, newValue):
    tracker = lis
    while tracker != None:
        if tracker['data'] == value:
            newNode = {'data':newValue, 'next': tracker['next']}
            tracker['next'] = newNode
            break
        else:
            tracker = tracker['next']

出于某种原因,我无法通过此功能执行任何操作。它不会改变列表。我想知道是否有人可以告诉我我做错了什么。

2 个答案:

答案 0 :(得分:1)

问题可能在于您如何定义初始节点或列表。例如,以下代码适用于Python3.4

def addAfter(lis, value, newValue):
    tracker = lis
    while tracker != None:
        if tracker['data'] == value:
            newNode = {'data':newValue, 'next': tracker['next']}
            tracker['next'] = newNode
            break
        else:
            tracker = tracker['next']

node1 = {'data':3,'next':None}
addAfter(node1,3,4)

print(node1)
print(node1['next'])

此输出

{'next': {'next': None, 'data': 4}, 'data': 3}
{'next': None, 'data': 4}

正如我们所期望的那样。所以这里有几种可能性

  • 您根本没有使用词典 - 您定义了自定义类并重载了 setitem getitem 。我非常怀疑这个
  • 您重载了equals或hash,因此评估不正确。怀疑这个
  • 您使用非内置对象作为值并且不会使equals重载,因此当您将Foo()与Foo()进行比较时,它会计算为false。这似乎有点可能。您可能认为事情是平等的,而实际上Python正在检查它们是否位于相同的内存位置,而不是它们的字段匹配
  • 您的测试代码错误,您打印的数据副本不是原始数据。这种事总是有可能的

尝试对每个测试进行测试,如果没有完成,请告诉我们。如果没有,请提供更多的上下文,即中断明显的场景

答案 1 :(得分:0)

您可以添加一个新类,例如:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

然后使用en_Knight的代码,否则,代码将难以阅读