连接Python链接列表

时间:2012-01-23 16:34:27

标签: python algorithm linked-list

我试图连接Python链表而不复制列表节点中包含的数据。我有一个函数,将使用传入的节点的副本连接列表,但我似乎无法获得不使用副本工作的功能。

这些功能用于测试和计时目的;我知道Python的内置列表非常棒!

这是我一直在使用的类和连接函数。

class Cell:
    def __init__( self, data, next = None ):
        self.data = data
        self.next = next

def print_list(self):
    node = self
    while node != None:
        print node.data
        node = node.next

连接函数并不是Cell类的成员函数。

def list_concat(A, B):
    while A.next != None:
        A = A.next
    A.next = B      
    return A

如果参数A有多个节点,则此函数会覆盖列表的第一个元素。我理解为什么会这样,但我不确定如何解决它。

以下是我一直用于此功能的测试代码。

e = Cell(5)
test = Cell(3, Cell(4))
test2 = list_concat(test2, e)   
test2.print_list()

非常感谢任何见解或帮助。

*已编辑以修复代码格式

2 个答案:

答案 0 :(得分:5)

请改为尝试:

def list_concat(A, B):
    current = A
    while current.next != None:
        current = current.next
    current.next = B
    return A

为函数的参数指定新值是一种糟糕的编程习惯,问题中的代码说明了原因:您使用A迭代原始列表,并且通过这样做,您丢失了对其的引用第一个元素。

答案 1 :(得分:0)

我不确定extend是否执行副本,但如果没有,请使用

A.extend(B)