题目地址(25. 合并两个排序的链表)

https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/

题目描述

  1. 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
  2. 示例1
  3. 输入:1->2->4, 1->3->4
  4. 输出:1->1->2->3->4->4
  5. 限制:
  6. 0 <= 链表长度 <= 1000
  7. 注意:本题与主站 21 题相同:https://leetcode-cn.com/problems/merge-two-sorted-lists/

前置知识


公司

  • 暂无

思路

image.png
image.png
image.png

关键点


代码

  • 语言支持:Java

Java Code:

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
  11. //定义返回节点的头结点 为了找到最后返回的结果
  12. ListNode pre = new ListNode(-1);
  13. //将l1l2的节点保存在返回链表中的动态下标
  14. ListNode cur = pre;
  15. //只有两边都不为空的情况才执行
  16. while (l1 != null && l2 != null) {
  17. //如果l1的值小于等于l2的值 就返回l1 反之 返回l2
  18. if (l1.val <= l2.val) {
  19. cur.next = l1;
  20. cur = cur.next;
  21. l1 = l1.next;
  22. }
  23. else{
  24. cur.next = l2;
  25. cur = cur.next;
  26. l2 = l2.next;
  27. }
  28. }
  29. //如果有一边=null 直接将另一个链表接在最后面就行
  30. if (l1 != null) {
  31. cur.next = l1;
  32. }
  33. if (l2 != null) {
  34. cur.next = l2;
  35. }
  36. return pre.next;
  37. }
  38. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:剑指 Offer 25. 合并两个排序的链表 - 图4#card=math&code=O%28n%29&id=kuWJA)
  • 空间复杂度:剑指 Offer 25. 合并两个排序的链表 - 图5#card=math&code=O%28n%29&id=S1r5f)