连接Python链表

4 投票
2 回答
6509 浏览
提问于 2025-04-17 10:54

我正在尝试将一个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

我不太确定 extend 是不是会进行复制,但如果它不进行复制的话,你可以直接使用

A.extend(B)
6

试试这个:

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

给函数的参数重新赋值其实是一种不好的编程习惯,你的问题中的代码就说明了这一点:你用A来遍历原始列表,但这样做让你失去了对它第一个元素的引用。

撰写回答