2016-04-20 19 views
0

リンクリストの実装に関するこのHackerRankの問題があります。かなり基本的なので、C++であらゆる種類のリンクリストの実装を行ったので、私はそれをjiffyでやると思いました。しかし、私はどこかでつかまっています。Pythonでリンクリストを実装する際の問題

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

あなたは私たちにあなたの "面接"を渡すように求めていますか? –

+0

@JohnZwinck練習問題かもしれません。 – letmutx

+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 
+0

はい、ありがとうございます!それはトリックを行うように見えた。リストの末尾に要素を挿入するよう質問されてから、私はいくつか修正を加えなければならなかったが。 –

1

私はエラーがここにあると思う:

head = mylist.insert(head, data) 

方法Solution.insert()は何かを返す、したがって、ヘッドは毎回Noneを割り当てられていないされていません。完了したら

は、Solution.insert()は返さなければなりませんnew_node

0

:このようなあなたのinsert方法を変更します。あなたが更新している

if head == None: 
     head = new_node 

headは機能insertにローカルであり、ループ内でheadは変更されません。したがって、headは常にループ内でNoneです。

関連する問題