我试图在节点的尾部插入一个节点,但我的列表一直保存着最后一个值
如果我尝试在头部插入1,5,7,在尾部插入9。当我将其打印出来时,我只会看到9
class Node:
def __init__(self,val,next=None)
self.val = val
self.next = next
head = None
def insert(val, pos = 'h')
global head
if head == None:
newNode = Node(val)
newNode.next = None
head = newNode
elif pos == 'h':
newNode = Node(val)
newNode.next = head
head = newNode
elif pos == 't':
newNode = Node(val)
newNode.next = None
#stuck here
while(head != None):
head = head.next
head = newNode
答案 0 :(得分:0)
我认为这里有两个错误。一种是您要替换全局头(如果在末尾添加,则必须保持不变)。对循环使用局部变量。其次,您是用新节点而不是其.next字段替换头本身。
答案 1 :(得分:0)
在您的代码中,头与尾之间没有任何联系。像这样更改您的代码。
elif pos == 't':
newNode = Node(val)
head.next = newNode
newNode.next = None
您可以删除下面的部分
#stuck here
while(head != None):
head = head.next
head = newNode
答案 2 :(得分:0)
添加尾节点时,请使用head的副本,当到达尾节点时,将新节点添加到它的“ .next”中:
# stuck here
tail = head
while(tail.next is not None):
tail = tail.next
tail.next = newNode
在您的示例中,您将head的全局值更改为指向刚添加的新节点。
答案 3 :(得分:0)
关于您的实现的很多事情都是不推荐/不赞成的。例如,您不需要为head使用全局变量。
class Node:
def __init__(self, val):
self.val = val
self.next = None
def insert_head(head, val):
node = Node(val)
node.next = head
head = node
return head
def insert_tail(head, val):
if head is None:
return Node(val)
head.next = insert_tail(head.next, val)
return head
head = insert_head(None, 1)
head = insert_head(head, 5)
head = insert_head(head, 7)
head = insert_tail(head, 9)
例如,这是一个提供相同功能的实现。要在头插入,我们只需创建一个具有给定值的新Node,将其下一个元素指向head指向的对象,然后将head指向该节点即可。
为了在尾部插入,我们使用了优雅的递归实现。即使提供的head
节点为None
,这两个功能也可以工作。
为什么要分为两个功能?因为通常您希望函数仅执行一个定义明确的任务。如果某个函数过于复杂,则应将其分解为一些较小的函数(同样可以做一件事并且做得很好)。新手经常根据提供的某些参数编写具有复杂行为的函数,但这在很大程度上不利于该函数的可读性,调试或性能。
答案 4 :(得分:0)
您可以使用这样的类:
class Node:
def __init__(self, val, next=None):
self.val = val
self.next = next
head = None
def insert(val, pos='h'):
global head
if head is None:
newNode = Node(val)
newNode.next = None
head = newNode
elif pos == 'h':
newNode = Node(val)
newNode.next = head
head = newNode
elif pos == 't':
newNode = Node(val)
head.next = newNode
newNode.next = None