LeetCode 21:合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
看到题目,首先想到直接把两个链表合成一个链表,后来发现直接使用链表太麻烦了,不太会写然后打算把初始两个链表转换为列表合并,代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
list1=[]
list2=[]
s=[]
if l1==None and l2==None:
return None
elif l1==None and l2:
return l2
elif l2==None and l1:
return l1
else:
while l1.next!=None:
list1.append(l1.val)
l1=l1.next
list1.append(l1.val)
while l2.next!=None:
list2.append(l2.val)
l2=l2.next
list2.append(l2.val)
#将两个链表转换为列表便于操作
while list1!=[] and list2!=[]:
if list1[0]<=list2[0]:
a=list1.pop(0)
s.append(a)
else:
b=list2.pop(0)
s.append(b)
if list1==[]:
s=s+list2
if list2==[]:
s=s+list1
return s
注意有时候输入由空链表的情况
后来在网上查了一下大佬的代码,使用了递归的方法,代码简洁易懂。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1==None and l2==None:
return None
if l1==None:
return l2
if l2==None:
return l1
if l1.val<=l2.val:
l1.next=self.mergeTwoLists(l1.next,l2)
return l1
else:
l2.next=self.mergeTwoLists(l1,l2.next)
return l2