目录
在javascript中链表就是一个对象,只是这个对象的形状如下
javascript
const root = {
val: 1,
next: {
val: 2,
next: {
val: 3,
next: {
val: 4,
next: null
}
}
}
}
删除某个节点就是
javascript
function deleteNode = (node) => {
node.val = node.next.val
node.next = node.next.next
}
206、反转链表
javascript
var reverseList = function(head) {
let p1 = head
let p2 = null
while(p1){
const tmp = p1.next
p1.next = p2
p2 = p1
p1 = tmp
}
return p2
};
// 就是题目中head = [1,2,3,4,5] 其实是head -> 1 -> 2 -> 3 -> 4 -> 5这样
//就是p1一直等于自己的下一堆,然后P2是等于p1的头指针然后指向自己的一堆
//p1的下一堆越来越少,p2中前面越来越多由p1提供来的节点
就是链表是链表,链表是个数据结构,要用指针来遍历里面的内容
2、两数相加
javascript
var addTwoNumbers = function(l1, l2) {
const l3 = new ListNode(0);
let p1 = l1
let p2 = l2
let p3 = l3
let carry = 0
while (p1 || p2) {
const v1 = p1 ? p1.val : 0
const v2 = p2 ? p2.val : 0
const v3 = carry + v1 + v2
carry = Math.floor(v3 / 10)
p3.next = new ListNode(v3 % 10)
if(p1) p1 = p1.next
if(p1) p2 = p2.next
p3 = p3.next
}
if (carry) {
p3.next = new ListNode(carry)
}
return l3.next
};
141、环形链表
判断一个链表是否是环形,就用两个指针去跑这个链表,一个快,一个慢,要是遇得到相等的,就是环,不是相等的,他自己就会退出循环
javascript
var hasCycle = function(head) {
let p1 = head
let p2 = head
while(p1 && p2 && p2.next) {
p1 = p1.next
p2 = p2.next.next
if (p1 === p2) {
return true
}
}
return false
};