在Python

时间:2016-04-20 04:50:17

标签: python python-2.7 linked-list

有关于实现链表的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一直向前移动而不是停留在开头。

3 个答案:

答案 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