题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
# 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, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 is None:
return l2
elif l2 is None:
return l1
elif l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
elif l2.val <= l1.val:
l2.next = self.mergeTwoLists(l2.next, l1)
return l2
解题思路:这里使用到的是递归的思路。我们最需要在链表中解决的问题就是,谁连接在谁的后面。如果的l1.val < l2.val那么就将l1.next(这个车厢的链接处)与后面那个车厢相连。反之亦然。
重点解析:
1.elif:这是else if的缩写,常用在if语句中
2.链表中常包含两个值,l1.val代表的是第一个车厢的值,l1.next代表的是车厢的连接方式
3.l1.next = self.mergeTwoLists(l1.next,l2)我们在调用函数的时候,要先给上函数的名字,在递归方法中多用self.xxx这样表示自己调用自己
处理结果:
递归法对于新手来说确实不太好理解,务必要先搞清楚链表的结构再来看这道题目。
来源:力扣(LeetCode)