我目前正在学习课程的链接列表并遇到麻烦。 我必须能够在指定项目之前插入项目 梨之前的(苹果,香蕉,梨)(Apple,banana,newItem,pear) 我用这段代码管理了这个:
def insert_before(head,data,location):
current = head
found = False
while not found:
if current.next.data == location:
new_node = Node(data)
new_node.next = current.next
current.next = new_node
found = True
else:
current = current.next
但是当我尝试在列表中的第一个项目之前插入一个项目时出现了我的问题,为了尝试这个,我想这样做:
if head.data == location:
new_node = Node(data)
head.next = head.next
new_node.next = head`
但这似乎不起作用。我在这里找到的任何指南都是在第一项之后添加一个项目,任何提示都会受到赞赏。
答案 0 :(得分:0)
在提供的源代码中,使用head.next = head.next
不执行任何操作,并且不会更改head
节点的值。
要通过之前插入新节点来修改链接列表中第一个节点的值,必须更新head
变量。
解决方案1 - 将head
指定为insert_before()
函数的返回值。
变量
previous
用于在之前和之后修改节点= None
,必须修改第一个节点。
def insert_before(head,data,location):
current = head
previous = None
found = False
while not found:
if (current != None):
if (current.data == location):
new_node = Node(data)
if (previous != None):
new_node.next = previous.next
previous.next = new_node
else:
new_node.next = head
head = new_node
found = True
else:
previous = current
current = current.next
else:
print('location ',location,' not found.')
break
return head
该功能的使用变为:
myhead = Node(5)
print(myhead.data) # >> 5
myhead = insert_before(myhead,3,5)
print(myhead.data) # >> 3
print(myhead.next.data) # >> 5
解决方案2 - 通过在head
类中添加Node
属性来使用Python的OOP。
OOP方法非常相似,但不是存储
head
在函数外部的节点,函数insert_before()
被添加到 班级Node
。
第1步 - 在课程Node
中添加属性head
。
class Node(object):
def __init__(self, data=None, next_node=None):
self.data = data
self.next = next_node
self.head = self # store the first node
第2步 - 使用内部self.head
代替head
作为参数
在这种情况下,当新节点插入第一个节点之前 节点,赋值非常简单
self.head = new_node
。
def Insert_Before(self,data,location):
current = self.head
previous = None
found = False
print('insert ',data,' before ',location)
while not found:
if (current != None):
if (current.data == location):
new_node = Node(data)
if (previous != None):
new_node.next = previous.next
previous.next = new_node
else:
new_node.next = self.head
self.head = new_node # update the first node
found = True
else:
previous = current
current = current.next
else:
print('location ',location,' not found.')
break
return
该功能的使用变为:
myhead = Node(5)
print(myhead.data)
myhead.insert_before(3,5)
print(myhead.head.data)
print(myhead.head.next.data)
警告:不要使用
myhead
作为第一个节点,而是使用myhead.head
属性。