1. 题目简介
题目:21. 合并两个有序链表
难度:简单
【题目描述】
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
2. 题目解析
一开始把这道题当成列表list做了QAQ
【链表与列表区别】
链表与列表(List)的不同之处在于它们在内存中存储元素的方式。列表使用一个连续的内存块来存储对其数据的引用,而链表则将引用作为其自身元素的一部分去存储。
链表中的每个元素称为一个节点,每个节点有两个不同的字段:
- Data包含了存储在该节点(node)中的数值;
- Next包含一个指向下一个元素的引用(reference)。
节点样子如图:
链表是节点的集合。第一个节点称为头节点,它被用作遍历列表的任何迭代的起点。最后一个节点的下一个引用必须指向None,以确定列表的结束。如图:
3. 代码实现
Python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> 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
执行用时:44 ms, 在所有 Python3 提交中击败了41.86% 的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了46.74% 的用户
ListNode 类使用成员变量 val 表示数据元素的值,使用指针变量 next 表示后继指针。
当list1为空的时候返回l2,当list2空的时候返回l1。
当list1的值小的时候,list1的下一个指向下一次迭代较小的那个返回list1(因为以list1开头);list2同理。