算法学习自记录/合并两个有序链表

127 阅读2分钟

合并两个有序链表


题目

将两个升序链表合并为一个新的 升序 链表并返回。

新链表是通过拼接给定的两个链表的所有节点组成的。


解答

我的分析

一句话总结题目

合并链表且有序

自己的解法思路

可能要用链表的知识吧,但是想不起来。


我的答案

想不出来!!链表的知识记不起来一点。

标准答案

 /**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} list1
 * @param {ListNode} list2
 * @return {ListNode}
 */
 var mergeTwoLists = function(list1, list2) {
     if(list1 === null){
         return list2;
     }
     if(list2 === null){
         return list1;
     }  
     if(list1.val<list2.val){
         list1.next = mergeTwoLists(list1.next,list2);
     }else{
         list2.next = mergeTwoLists(list2.next,list1);
     }
 }


答案分析

递归函数mergeTwoLists,用于合并两个已排序的链表。

1,排除空。链表为空时,无需合并,直接返回另一个链表。

2,对比两个链表的val(节点值)。

  • 当1<2时,将1作为接受插入的链表(最终结果),递归调用mergeTwoLists获得合并结果。这里1已经是最小的了,不需要改动,只需要将1.next指向的链表和2继续比较即可。

  • 当1>2时,同理。


结论

自我总结

1,链表?

链表中的节点顺序链接,形成一个链式结构

它是由一系列节点(Node)组成,每个节点包括了两部分:数据域value(存储数据)和指针域next(指向下一个节点)。

添加或移除元素的时候不需要移动其他元素,这是链表最大的好处。

例如:包含三个值的链表结构 1-2-3

const node1 = {
    value:1,
    next:node2
}
const node2 = {
    value:2,
    next:node3
}
const node3 = {
    value:3,
    next:null
}

node1.next = node2;
node2.next = node3;

2,链表与数组?

数组链表
数据类型推荐相同,因为要求所有元素占用相同的内存空间可以不同,不限制
空间分配栈:先进后出堆:先进先出,后进后出
内存区域连续不连续
优点随机访问性强,查询速度快查询相对困难,但增加和删除容易

引申思考

1,这里1与2的顺序重要吗?

会影响获得结果的时间。因为比较的长度不一样。


题目来源:力扣(LeetCode)

链接:leetcode.cn/problems/me…

其他来源:CSDN

链接:blog.csdn.net/weixin_4899…