力扣热题100之合并两个有序链表

题目

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

代码

方法一:新建一个链表

这里就先随便新建一个节点作为一个链表的头节点,然后每次遍历都将小的那个节点放入这个链表,遍历完一个链表之后,将另一个链表后面的所有数都接在这个新链表后面,输出的时候从这个新链表的第二个节点开始输出。

bash 复制代码
# 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]:
        res=ListNode(1)#新链表
        prev = res
        while list1 and list2:
            if list1.val<=list2.val:
                prev.next=list1
                list1=list1.next
            else:
                prev.next=list2
                list2=list2.next
            prev=prev.next
        prev.next=list1 if list1 != None else list2
        return res.next

方法二:递归

只能说这个方法太强了,过程大概就像下面这个图这样

bash 复制代码
# 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 not list1:
            return list2
        if not list2:
            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
相关推荐
大耳猫几秒前
卡尔曼滤波算法简介与 Kotlin 实现
算法·kotlin·卡尔曼滤波
重生之后端学习几秒前
day23-集合(泛型&Set&数据结构)
java·开发语言·数据结构·算法
焜昱错眩..1 小时前
代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历
数据结构·算法
Tisfy1 小时前
LeetCode 1550.存在连续三个奇数的数组:遍历
算法·leetcode·题解·数组·遍历
wang__123001 小时前
力扣70题解
算法·leetcode·职场和发展
菜鸟破茧计划1 小时前
滑动窗口:穿越数据的时光机
java·数据结构·算法
_Itachi__2 小时前
LeetCode 热题 100 101. 对称二叉树
算法·leetcode·职场和发展
少了一只鹅2 小时前
深入理解指针(5)
java·c语言·数据结构·算法
朱剑君3 小时前
第三天——贪心算法——区间问题
算法·贪心算法
阳洞洞3 小时前
leetcode 15. 三数之和
leetcode·双指针