LeetCode题:21合并两个有序链表

编程入门 行业动态 更新时间:2024-10-21 11:37:20

LeetCode题:21合并两个有序<a href=https://www.elefans.com/category/jswz/34/1769662.html style=链表"/>

LeetCode题:21合并两个有序链表

21合并两个有序链表

        题目描述

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

示例 1:

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

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

题目思路:

一、双指针法:

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

定义一个定义一个新的链表,再定义一个临时链表,遍历两链表,比较list1和list2的值,谁小就把谁放进临时链表里,同时,小的那个链表还要走到next链表中,继续下次list1和list2的比较。

图示:

依次类推,如果某一个链表遍历完了,那就把剩下一个没有遍历完的链表全部放进tmp中,最后返回记录tmp的头结点

二、递归法:

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

我们判断完一次谁的节点小,就改变一次小链表的指向,那么这时我们就可以又看成两个链表的合并,这不就是递归吗

如图:

这时还是合并两个有序链表

依次类推

代码演示

双指针法:

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list1 == null) return list2;if(list2 == null) return list1;ListNode listnode = new ListNode();ListNode tmp = listnode;while(list1 != null && list2 != null) {if(list1.val <= list2.val) {tmp.next = list1;list1 = list1.next;tmp = tmp.next;} else {tmp.next = list2;list2 = list2.next;tmp = tmp.next;}}if(list1 != null) {tmp.next = list1;}if(list2 != null) {tmp.next = list2;}return listnode.next;}
}

递归法:

class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list1 == null) return list2;if(list2 == null) return list1;if(list1.val <= list2.val) {list1.next = mergeTwoLists(list1.next, list2);return list1;}list2.next = mergeTwoLists(list2.next, list1);return list2;}
}

更多推荐

LeetCode题:21合并两个有序链表

本文发布于:2023-11-17 02:33:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1638049.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:链表   两个   LeetCode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!