【发布时间】:2021-03-14 01:27:11
【问题描述】:
我正在用 Python 编写一个链表,但遇到了一个对调试来说非常麻烦和可怕的问题,我觉得我错过了一些关于 Python 的东西。我应该创建一个具有一些基本功能的单链表。其中一个是 take() 函数,它旨在创建一个包含原始列表的 n 个第一个元素的新列表。 但是,创建 LinkedList 类的新实例似乎会更改 .self 参数并且修改了变量节点,因为属性 .next 变为 None。结果,当创建一个列表,然后尝试从其中的 n 个元素中创建一个新列表时,程序会无限期地运行,但无论我看哪一部分,我都找不到循环或它背后的原因。
class LinkedList:
def __init__(self, head=None):
self.head = head
def is_empty(self):
if self.head == None:
return True
else:
return False
def add_last(self, node):
if self.is_empty():
self.head = node
return
nextEl = self.head
while True:
if nextEl.next is None:
nextEl.next = node
return
nextEl = nextEl.next
def take(self, n):
node = self.head
newHead = self.head
newHead.next = None
newList = LinkedList(newHead)
count = 0
while count < n:
newList.add_last(node.next)
node = node.next
count += 1
return newList
class Node:
def __init__(self, data, next=None):
self.data = data
self.next = next
感谢您的所有帮助。
【问题讨论】:
-
newHead = self.head不会创建新的头部。它将self.head处的相同对象分配给变量newHead。因此,您的新链表LinkedList(newHead)是使用与旧链表共享的节点创建的
标签: python list linked-list