输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路1:使用另外一个链表来连接上面的两个链表,但是要注意有一个第三个链表的伪头节点,方便我们输出第三个链表
代码:
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
#为第三个节点创建一个不动的头节点
head=cur=ListNode(0)
#判断两种列表为空的情况
if l1==None:
return l2
elif l2==None:
return l1
else:
while l1 and l2:
if l1.val<=l2.val:
cur.next=l1
l1=l1.next
else :
cur.next=l2
l2=l2.next
cur = cur.next
cur.next=l1 if l1 else l2#最后会剩一个l1或者l2,所以再添加一次
return head.next
思路二:
进行递归,如果l1的val小于l2的val,那就让l1的下一个指向剩下的两个链表的合并操作;l2相同,都是一个操作一个操作的进行递归。
代码:
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
#为第三个节点创建一个不动的头节点
head=cur=ListNode(0)
#判断两种列表为空的情况
if l1==None:
return l2
elif l2==None:
return l1
#递归解法,判断谁小,将其与剩下的操作结合
else:
while l1 and l2:
if l1.val<l2.val:
l1.next=self.mergeTwoLists(l1.next,l2)
return l1
else:
l2.next=self.mergeTwoLists(l1,l2.next)
return l2