用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的初级算法开始。今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲笑菜鸡。
给定两个有序整数数组 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实现合并两个排序的列表,但一直报错,请问怎么修改啊?的主要内容,如果未能解决你的问题,请参考以下文章