以下是链接列表的基本示例,如下所示
头 - > [4] - > [6] - > [8] - >无
class Node:
def __init__(self, data, next = None):
self.data = data
self.next = next
class LL:
def __init__(self):
self.head = None
def insert_tail(self, o):
new_node = Node(o)
if self.head == None:
self.head = new_node
else:
current = self.head
while current.next != None:
current = current.next
current.next = new_node
def __str__(self):
result = ''
current = self.head
while current != None:
result = result + str(current.data) + ", "
current = current.next
return result[:-2]
def clone(self, empty):
'''(LL, NoneType) -> LL
'''
empty = LL()
current = self.head
while current != None:
empty.insert_tail(None)
current = current.next
return empty
a = LL()
a.insert_tail(4)
a.insert_tail(6)
a.insert_tail(8)
print(a)
我的问题是,如何在不改变原始链表的情况下克隆它?哦,我不想使用任何内置的数据结构来执行此操作,如没有列表,字典,元组等(也没有导入)
编辑:我不想克隆数据,我只想要一个链接列表,如:
head [] - > [] - > [] - >无(这是上述一个的克隆)
答案 0 :(得分:0)
首先,您的列表不是最理想的。实现链表时,您应该:
O(n)
要解决您的问题,您可以采取以下方法: 创建一个空列表并遍历现有列表。对于现有列表中的每个元素,只需将其添加到新列表的末尾。
答案 1 :(得分:0)
克隆链表的最基本方法是逐个遍历列表,然后创建一个新的链表,像往常一样在尾部插入新元素。创建LL
类的新实例,然后使用insert_tail()
方法添加要克隆的列表中的项目。
如果您希望克隆data
属性以使克隆列表不与原始列表进行交互,那么您将不得不在Python中使用深层复制。
https://docs.python.org/2/library/copy.html
值得注意的是,在整个链表上使用深层拷贝可能更简单,但是,您的里程可能会因您想要完成的内容而有所不同。