合并两个有序链表
题目
将两个升序链表合并为一个新的 升序 链表并返回。
新链表是通过拼接给定的两个链表的所有节点组成的。
解答
我的分析
一句话总结题目
合并链表且有序
自己的解法思路
可能要用链表的知识吧,但是想不起来。
我的答案
想不出来!!链表的知识记不起来一点。
标准答案
/**
* 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)
其他来源:CSDN