链表是什么?
- 多个元素组成的列表
- 一般以链表的头节点表示该链表
- 元素存储不连续,用 next 指针连在一起

数组 VS 链表
- 数组:增删非首尾元素时往往需要移动元素
- 链表:增删非首尾元素,不需要移动元素,只需要更改 next 的指向即可
JS 中的链表
- JS 中没有链表,使用 Object 来模拟链表 ```javascript const a = { val: ‘a’ }; const b = { val: ‘b’ }; const c = { val: ‘c’ }; const d = { val: ‘d’ }; a.next = b; b.next = c; c.next = d;
// 遍历链表 // 1.声明一个指针,指向头节点 let p = a; while(p) { console.log(p.val); p = p.next; }
// 插入 const e = { val: ‘e’ } e.next = c.next; c.next = e;
// 删除 e c.next = e.next;
<a name="jn1Vw"></a>### LeetCode 题- 237.删除链表中的节点- 思路- 无法直接获取被删除节点的上一个节点- 将被删除节点转移到下一个节点,或者说将下一个节点的值移到前一个节点- 206.反转链表- 思路- 先考虑两个节点的反转,将 n+1 的 next 指向 n- 再考虑反转多个节点:双指针遍历链表,重复上述操作```javascript// 1.创建两个指针,一前一后遍历链表// 2.不断反转双指针var reverseList = function(head) {let p1 = head;let p2 = null;while(p1) {let temp = p1.next;p1.next = p2;p2 = p1;p1 = temp;}// p1 最后指向了 nullreturn p2;}
- 2.两数相加
