gpt4 book ai didi

python - python3中两个排序链表的交集?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:53:01 26 4
gpt4 key购买 nike

我的代码无法同时打印出两个排序链表的交集的新列表。它无法访问函数内部的列表。请指出我的代码中的错误。我的代码没有缩进问题,算法似乎也没有问题。

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'

最佳答案

您使用 Linked 的两个实例调用 Linked.intersect,它没有 data 成员。您需要在 intersect 方法中获取实际节点:

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

您可能不需要使用两个参数调用intersect;将一个列表与另一个列表相交就足够了:

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()

关于python - python3中两个排序链表的交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45756501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com