【LeetCode】21. 合并两个有序链表

21. 合并两个有序链表

知识点:链表

题目描述

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

示例
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 输入:l1 = [], l2 = [] 输出:[] 输入:l1 = [], l2 = [0] 输出:[0]

解法一:迭代法

注意到两个链表已经是升序排好的,所以可以分别用两个指针定位到两个链表元素,然后依次比较大小,依次往后接,如果某个链表到尾了,那就直接把剩下的那个链表接上来接可以了;

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode headNode = new ListNode(-1); //定义一个虚拟头节点,方便最后返回; ListNode headTemp = headNode; //负责移动; while(l1 != null && l2 != null){ if(l1.val > l2.val){ headTemp.next = l2; //headtemp下一个接小的节点; l2 = l2.next; //两个链表的指针后移; }else{ headTemp.next = l1; l1 = l1.next; } headTemp = headTemp.next; //新链表的指针后移; } headTemp.next = l1 == null ? l2 : l1; //查看哪个链表到尾了,就把另一个链表接到后面; return headNode.next; } }

时间复杂度:O(M+N);

  • 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]: head = ListNode(-1) prehead = head while list1 != None and list2 != None: if list1.val <= list2.val: prehead.next = list1 list1 = list1.next else: prehead.next = list2 list2 = list2.next prehead = prehead.next prehead.next = list1 if list1 is not None else list2 return head.next

解法二:递归

时间复杂度:

体会

链表主要注意指针的移动和虚拟头节点的定义;

参考

合并两个排序列表


__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/15032593.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(57)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】21. 合并两个有序链表』
点击右上角即可分享
微信分享提示