::
链表
链表是多个元素组成的列表
元素存储不连续,用next指针连在一起
遍历链表
md
let p = a;
while(p){
console.log(p.val)
p = p.next
}插入
md
const e = {val:'e'}
c.next = e;
e.next = d;删除
c.next = d删除链表中的节点LC237
要求:请编写函数,使其可以删除某个链表中给定的非末尾节点,将只被给定要求被删除的节点
现有链表 -- head = [4,5,1,9]
function ListNode(val) {
this.val = val
this.next = null
}
var deleteNode = function(node){
node.val = node.next.val
node.next = next.next.next
}反转链表LC206
思路: 双指针迭代,prev记录前节点,curr遍历,反转指针
输入:head头节点
输出:反转后新头节点
思路及代码
思路:记录,反转 给前任赋null,现任是头节点 然后还有现任的时候,先把下任存好(const next = curr.next) 让现任的next指针去找前任,即 curr.next = prev 把前任换成现任, prev = curr 把现任换成下一任, curr = next
var reverseList = function(head){
let p1 = head
let p2 = null
while(p1){
const tmp = p1.next
p1.next = p2s
p2 = p1
p1 = p2.next
}
return p2
}JS
function reverseList(head){ //传入头节点
let prev = null, curr = head; //头节点前节点为null,curr拿到头节点
while(curr){
const next = curr.next; //拿到当前节点的下一节点
curr.next = prev; //当前节点的next指向prev
prev = curr; //让prev指向curr当前指向的节点
curr = next; //再让curr指向next
}
return prev;
}两数相加
两个非空链表表示两个非负整数,各自位数按照逆序存储,并且每个节点只能存储一位数字
如果我们将两数相加,返回一个新的链表表示它们的和
假设除了数字0之外这两个数都不会以0开头
var twoadd = function(l1,l2){
const l3 = new ListNode(0)
let p1 = l1;
let p2 = l2;
let p3 = l3;
let carry = 0
while(p1 || p1){
const v1 = p1 ? p1.val : 0;
const v2 = p2 ? p2.val : 0;
const val = v1 + v2 + carry
carry = Math.floor(val/10)
p3.next = new ListNode(val % 10)
if(p1) p1 = p1.next
if(p2) p2 = p2.next
p3 = p3.next
}
if(carry){
p3.next = new ListNode(carry)
}
return l3.next
}删除排序链表中的重复元素 LC38
给定一个排序链表,删除所有重复元素,确保每个元素只出现一次
var deleteDuplicates = function(head) {
let p = head;
while(p && p.next){
if(p.val === p.next.val){
p.next = p.next.next
}else {
p = p.next
}
}
return head;
}环形链表 LC 141
给定一个链表,判断链表中是否有环,我们用pos表示链表尾连接到链表中的位置,如果pos为1则代表链表中没有环
var hasCycle = function(head){
let p1 = head;
let p2 = head;
while(p1 && p2 && p2.next){
let slow = p1.next;
let fast = p2.next.next;
if(p1 === p2) return true
}
return false
}使用链表指针获取JSON节点值
const json = {
a:{b:{c:1}},
d:{e:2},
}
const path = ['a','b','c']
let p = json;
path.forEach(k =>{
p = p[k]
}
)Theme Data
Page Data
Page Frontmatter
More
Check out the documentation for the full list of runtime APIs.