2017-08-18 15 views
0

私のコードは2つの並べ替えられたリンクリストの交差点である新しいリストを印刷することができません。機能内のリストにアクセスすることはできません。私のコードで間違いを指摘してください。私のコードにインデントの問題はなく、アルゴリズムもうまくいくようです。ここでpython3でリンクされた2つのリストの交点?

class Node(object): 

    def __init__(self,data): 
     self.data = data 
     self.next = None 

class Linked(object): 

    def __init__(self): 
     self.head = None 

    def push(self,n): 
     new_node = Node(n) 
     new_node.next = self.head 
     self.head = new_node 

    def print_list(self): 
     current = self.head 
     while current: 
      print(current.data) 
      current = current.next 

    def intersect(self,l1,l2): 
     l1 = l1.head 
     l2 = l2.head 
     dummy = cur = Node(0) 
     while l1 and l2: 
      if l2.data>l1.data: 
       l1=l1.next 
      elif l1.data>l2.data: 
       l2=l2.next 
      else: 
       cur.next = l1 or l2 
       l1 = l1.next 
       l2 = l2.next 
      cur = cur.next 
     return dummy.next 
llist = Linked() 
llist1 = Linked() 
llist.push(6) 
llist.push(4) 
llist.push(3) 
llist.push(2) 
llist.push(1) 
llist1.push(8) 
llist1.push(6) 
llist1.push(4) 
llist1.push(2) 
l = Linked() 
print(l.intersect(llist,llist1).data) 

はトレースバックです:

Traceback (most recent call last): 
    File "C:/Users/omsai/Desktop/intersection.py", line 48, in <module> 
    print(l.intersect(llist,llist1).data) 
    File "C:/Users/omsai/Desktop/intersection.py", line 26, in intersect 
    if l2.data>l1.data: 
AttributeError: 'Linked' object has no attribute 'data' 

答えて

2

あなたはdataメンバーを持っていないLinkedの2つのインスタンス、とLinked.intersectを呼んでいます。あなたはintersect方法で実際のノードを取得する必要があります。

def intersect(self,l1,l2): 
    l1 = l1.head 
    l2 = l2.head 
    dummy = cur = Node(0) 
    # ... 

あなたはおそらく二つの引数でintersectを呼び出す必要はありません。別のに対して1つのリストを交差するのに十分だろう。

def intersect(self, olinked): 
    thisone = self.head 
    otherone = olinked.head 
    retval = Linked() 
    while thisone and otherone: 
     if otherone.data > thisone.data: 
      thisone = thisone.next 
     elif thisone.data > otherone.data: 
      otherone = otherone.next 
     else: # thisone.data == otherone.data 
      retval.push(otherone.data) 
      thisone = thisone.next 
      otherone = otherone.next 
    return retval 

# ... 

llist.intersect(llist1).print_list() 
+0

そのは今、次のエラー表示:トレースバック(最新の呼び出しの最後): ファイル "C:/Users/omsai/Desktop/intersection.py" プリント(l.intersect(llist、中、ライン51を、 llist1).data) ファイル "C:/Users/omsai/Desktop/intersection.py"、行33、交差点 cur.next = l1.data AttributeError: 'NoneType'オブジェクトに属性 'next'がありません –

+0

ありがとう助けを求めて出来た。 leetcodeに関する質問を解決するように思えます。あなた自身のエディタは全く異なります –

0
class Node(object): 
    def __init__(self, data, next): 
     self.data = data 
     self.next = next 

class Linked(object): 

    def __init__(self): 
     self.head = None 

    def push(self,n): 
     self.head = Node(n, self.head) 

    def print_list(self): 
     current = self.head 
     while current: 
      print(current.data) 
      current = current.next 
    def intersect(self, olinked): 
     thisone = self.head 
     otherone = olinked.head 
     retval = Linked() 
     while thisone and otherone: 
      if otherone.data > thisone.data: 
       thisone = thisone.next 
      elif thisone.data > otherone.data: 
       otherone = otherone.next 
      else: 
       retval.push(otherone.data) 
       thisone = thisone.next 
       otherone = otherone.next 
     return retval 
llist = Linked() 
llist1 = Linked() 
llist.intersect(llist1).print_list() 

変更あなたのノード定義。うまく

関連する問題