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

标签 python algorithm python-3.x data-structures linked-list

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

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/

相关文章:

python - 如何使 pylint 成为 setup.py 测试过程的一部分?

python网站语言检测

java - 从二维数组中找到最低的总和路径

python - python中的LDA使用sklearn

python - 脚本: updating scripts

python - PYTHON中如何对Mysql进行转义

python - 在python类中实现归并排序功能,报错

python-3.x - 如何在conda环境中为python 3运行IDLE?

python - 如何将 pandas 数据框列转换为 native python 数据类型?

python-3.x - 哪个模块是 Python 3 到 FUSE 的实际接口(interface)?