链表
为什么学习链表
链表(Linked List)是一种基础但强大的线性数据结构,与数组不同,它的元素在内存中不是连续存储的,而是通过指针(引用)连接起来。链表在插入/删除操作上具有O(1)的时间复杂度优势,是理解指针操作和递归思维的绝佳载体,也是学习更复杂数据结构(如树、图)的重要基础。
链表的特征
-
有序列表
-
离散型存储
-
只能通过前一个节点访问到后一个节点(指针)
-
增删节点的效率很高
-
查找节点的效率很低(要找目标节点必须得先知道目标节点前面的节点)
节点部分
-
数据域
-
指针域
const list = { //节点
val : 'a', //数据域
next : { //指针域
val : 'b',
next : '...'
}
}
图像表示:
练习
力扣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