「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。
前言
最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--合并两个有序链表。
题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
示例
题解
/**
* 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(l1, l2) {
var node = new ListNode(null);//创建一个空链表
var current = node;
//第一种情况:就是两个链表都是为空,则返回空
if(!l1){
return l2;
}
if(!l2){
return l1;
}
//第二种情况,就是两个链表中存在数值
while(l1 || l2){//如果其中一个链表成立
if(l1 &&l2){
if(l1.val<l2.val){//如果l1的值比l2大,那么当前最新的值就是l1的
current.next=l1;
l1 = l1.next;//链表指向l1,l1指向下一个
}else{//如果l1的值比l2xiao,那么指向l2
current.next=l2;
l2 = l2.next;
}
}else{//其中一个链表值存在,进行比较
if(l1){
current.next=l1;
l1=l1.next;
}else if(l2){
current.next=l2;
l2=l2.next;
}
}
current=current.next;//连接排列好的链表
}
return node.next;//从头打印这排列好的链表
};
分析
链表中的节点:每一个节点通常最少有两个属性,一个表示该节点的值,可以用val来表示,另外一个就是指向下一个节点的指针,可以用next表示: