JavaScript 链表从入门到精通:原理、实现与应用实战

92 阅读1分钟

链表

为什么学习链表

链表(Linked List)是一种基础但强大的线性数据结构,与数组不同,它的元素在内存中不是连续存储的,而是通过指针(引用)连接起来。链表在插入/删除操作上具有O(1)的时间复杂度优势,是理解指针操作和递归思维的绝佳载体,也是学习更复杂数据结构(如树、图)的重要基础。

链表的特征

  • 有序列表

  • 离散型存储

  • 只能通过前一个节点访问到后一个节点(指针)

  • 增删节点的效率很高

  • 查找节点的效率很低(要找目标节点必须得先知道目标节点前面的节点)

节点部分

  • 数据域

  • 指针域

const list = {     //节点
    val : 'a',     //数据域
    next : {       //指针域
        val : 'b',
        next : '...'
      }   
}

图像表示:

QQ_1750950449479.png

练习

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

思路:用链表的思想,判断谁大谁小,用原始指向最小的那个以此类推从而得到一个新的链表,最后返回新链表

var mergeTwoLists = function (list1, list2) {
  let list3 = new ListNode()
  let res = list3
  while (list1 && list2) {
    if (list1.val <= list2.val) {
      res.next = list1
      list1 = list1.next
    }
    else {
      res.next = list2
      list2 = list2.next
    }
    res = res.next
  }
  if (list1) {
    res.next = list1
  }
  if (list2)
    res.next = list2
  return list3.next
};
  • 注意:在链表中一般要自己定义一个头结点,并且找一个“代理”,因为最后返回的是所有新链表的总和,如果没有新节点和代理的话,返回值将不是所有,而是最后一个。
 let list3 = new ListNode()
  let res = list3