有关于实现链表的HackerRank问题。这是非常基础的,我认为我已经做了很多,因为我已经在C ++中完成了各种链表实现。但是我被困在某个地方。
class Node:
def __init__(self,data):
self.data = data
self.next = None
class Solution:
def display(self,head):
current = head
while current:
print current.data,
current = current.next
def insert(self,head,data):
new_node = Node(data)
if head == None:
head = new_node
else:
current = head
while current.next:
current = current.next
current.next = new_node
mylist= Solution()
T=int(input())
head=None
for i in range(T):
data=int(input())
head=mylist.insert(head,data)
mylist.display(head)
只有insert
功能可编辑。其余代码由HackerRank提供,无法更改。代码在插入结束时不打印任何内容,当我尝试在插入时打印出值时,似乎head
一直向前移动而不是停留在开头。
答案 0 :(得分:2)
您要在所有元素之后附加new_node
,并且不返回新创建的节点。像这样修改insert
方法:
def insert(self,head,data):
new_node = Node(data)
if head is not None:
current = head
new_node.next = current
return new_node
答案 1 :(得分:1)
我认为错误就在这里:
head = mylist.insert(head, data)
方法Solution.insert()
没有返回任何内容,因此每次都会为head分配None。
完成后,Solution.insert()
必须返回new_node
已创建的
答案 2 :(得分:0)
您的代码无法正常工作的原因是由于您在insert
方法中执行的无检查。
if head == None:
head = new_node
您要更新的head
是函数insert
的本地,并且不会在循环中更改head
。因此,head
在您的循环中始终为None
。