题目地址(21. 合并两个有序链表)
https://leetcode-cn.com/problems/merge-two-sorted-lists/
题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列
前置知识
公司
- 暂无
思路
整一条新的链表 然后双指针遍历之前两个链表 哪个小就添加哪个 最后剩余的不为空的链表就直接加到新链表的最后
关键点
代码
- 语言支持:Java
Java Code:
/*** 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 list1, ListNode list2) {ListNode node = new ListNode(-1);ListNode res = node;ListNode head1 = list1;ListNode head2 = list2;while (head1 != null && head2 != null) {if (head1.val >= head2.val) {res.next = head2;res = res.next;head2 = head2.next;}else {res.next = head1;res = res.next;head1 = head1.next;}}if (head1 == null) {res.next = head2;}if (head2 == null) {res.next = head1;}return node.next;}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=QXm9K)
- 空间复杂度:
#card=math&code=O%28n%29&id=ovmNq)
