用Python实现合并两个排序的列表,但一直报错,请问怎么修改啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Python实现合并两个排序的列表,但一直报错,请问怎么修改啊?相关的知识,希望对你有一定的参考价值。

class ListNode(object):
def __init__(self,val):
self.val = val
self.next = 0

class Solution(object):
def mergeTwoLists(self,l1,l2):
if l1 is None:
return l2
if l2 is None:
return l1

dummyhead=ListNode(0)
dummyhead.next=None
p=dummyhead
while l1 is not None and l2 is not None:
if l1.val<l2.val:
p.next=l1
l1=l1.next
else:
p.next=l2
l2=l2.next
p=p.next
if l1 is not None:
p.next=l1
else:
p.next=l2
return dummyhead.next

l1=[1,3,5,7]
l2=[2,4,6,8]
Solution.mergeTwoLists(l1,l2)

你所定义的list node class和python自带的list type是不同的东西,不能通用,必须先转换

其他小错我直接帮你改掉了

下面是改好可以运行的代码:

class ListNode(object):
    def __init__(self,val):
        self.val = val
        self.next = None
    def __repr__(self):
        return str(self.val)

def LinkedList(pythonlist):
    l = ListNode(pythonlist[0])
    c = l
    for i in range(1,len(pythonlist)):
        l.next = ListNode(pythonlist[i])
        l = l.next
    return c

def PythonList(ListNode):
    l = []
    while ListNode != None:
        l.append(ListNode.val)
        ListNode = ListNode.next
    return l
    
class Solution(object):        
    def mergeTwoLists(self,l1,l2):
        if l1 is None:
            return l2
        if l2 is None:
            return l1

        dummyhead=ListNode(0)
        dummyhead.next=None
        p=dummyhead
        while l1 is not None and l2 is not None:
            if l1.val<l2.val:
                p.next=l1
                l1=l1.next
            else:
                p.next=l2
                l2=l2.next
            p=p.next
            if l1 is not None:
                p.next=l1
            else:
                p.next=l2
        return dummyhead.next

l1=LinkedList([1,3,5,7])
l2=LinkedList([2,4,6,8])
sol = Solution()
print(PythonList(sol.mergeTwoLists(l1,l2)))

(LinkedList(pythonlist) 方法把一个传统的python list转换成你用的首位相衔的listnode 形式,PythonList(ListNode) 则是转换回来)

同时,linkedlist的数据类型在c里面比较常用,python里面一般用不着这么麻烦


希望对你有帮助

参考技术A 有好多错误:

首先,Solution是一个类,类的方法应该被对象去调用
obj=Solution
obj.mergeTwoLists(l1,l2)

python3实现合并两个有序数组

  很早就听同学和师兄经常说刷题很重要,然而编程能力一直都很渣的我最近才开始从leetcode的初级算法开始。今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲笑菜鸡。

88/809 合并两个有序数组
 

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 使得 num1 成为一个有序数组。

说明:

  • 初始化 nums1 和 nums2 的元素数量分别为 m 和 n
  • 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]

我采用的方法:
class Solution:
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        del(nums1[m:])
        del(nums2[n:])
        nums1.extend(nums2)
        nums1.sort(reverse=False)

思路很简单,就是删除nums1中第m个(从1开始)元素后面的元素,删除nums2后面第n个元素后面的元素,再用num2列表扩展nums1列表,最后再对所有元素进行升序排序。

用时最短的方法:

class Solution:
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        for num in nums2:
            nums1[m] = num
            m += 1
        nums1.sort()
        

他的思路是把nums2的元素放到nums1第m个(从0开始)数的后面。好奇他为什么没有用到n这个值,感觉好像错了,用官网测试了他的算法竟然结果也是对的,太奇怪了。

 

以上是关于用Python实现合并两个排序的列表,但一直报错,请问怎么修改啊?的主要内容,如果未能解决你的问题,请参考以下文章

python语句中合并两个列表并且将列表中的数安大小排列

python语句中合并两个列表并且将列表中的数安大小排列

Python中,如何给列表排序?

如何在python中把两个列表的各项分别合并为列表

python合并两个有序列表(list)

python合并多个EXCEL表