21.合并两个有序链表
这道题是leecode hot100的第21题
难度: 简单
题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
思路分析:
链表题,想一下链表这个数据结构, 单链表, 每个节点node都有next和val,val是该节点的值, next是指向下一节点, 这就够用了
题解语言: js
题解:
var mergeTwoLists = function (list1, list2) {
//定义两个节点来表示当前节点
let p1 = list1;
let p2 = list2;
//创建一个虚拟头节点方便后续操作
const dummyHead = new ListNode(null);
//新建的链表头节点 定义为 虚拟头节点
let p = dummyHead;
//循环遍历节点
while (p1 !== null && p2 !== null) {//一直遍历直到某一个链表是空节点
//剩下的是排队思想,谁大谁站在前面,小的跟另一队的下一个节点来比
if (p1.val > p2.val) {
p.next = p2; //给新链表添加节点
p2 = p2.next; //切换当前节点
} else {
p.next = p1;//给新链表添加节点
p1 = p1.next; //切换当前节点
}
p = p.next;//新链表每次都新增节点了,也需要切换当前节点
}
//下面是为了把某链表遍历完之后(当前节点是null),之后的另一个链表的后面的元素全都拼接到新链表上
p.next = p1 === null ? p2 : p1;
//返回新链表
return dummyHead.next;
};
举个例子吧, 小学每个学期都会排座位吧, 怎么分的, 是按身高吧
我们分成两队, 低的站前边,高的站后面(这两队短,同学们自己来比着排,有没有勾起了你儿时的回忆呢?)
然后每一队的第一个同学进行比较
谁低谁去站到新的一队后面
就这么一直比
就能得到一个新的身高是升序的队
这个解法也是这样的,两个链表一直比
比到其中一队没人了,那剩下的一队全都按顺序站到新队的后面就好了
是不是很简单