题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
解题思路
- 技巧:递归
- 伪代码:
若l1空:返回l2
若l2空:返回l1
若l1指向的节点数大于l2(l1.val>l2.val):返回l1且更新l1.next
(结果链表的头结点就是l1,因此需要更新l1.next)
否则:返回l2且更新l2.next(结果链表的头结点就是l2) - l1.next = self.mergeTwoLists(list1.next,list2)
表示l1的下个节点由l1之后剩余的节点和l2的所有节点确定,即对两者继续排序的结果
依次递归,每次递归都会有一个节点l1或l2挂在之前结果后
直至l1或l2为空,返回剩余节点就结束
tips
- l1.val表示节点的数值
- python调用函数本身的写法是self.函数名(参数1,参数2)
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
if list1 is None:
return list2
if list2 is None:
return list1
if list1.val<list2.val:
list1.next = self.mergeTwoLists(list1.next,list2)
return list1
else:
list2.next = self.mergeTwoLists(list1,list2.next)
return list2