LeetCode之--合并两个有序链表

125 阅读2分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。

前言

最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--合并两个有序链表。

题目

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的

示例

image.png

image.png

image.png

题解

/**
 * 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;//从头打印这排列好的链表

};

分析

image.png 链表中的节点:每一个节点通常最少有两个属性,一个表示该节点的值,可以用val来表示,另外一个就是指向下一个节点的指针,可以用next表示:

image.png