const createList = value => {
return createNode(value);
};
const appendList = (list, value) => {
const node = createNode(value);
let x = list;
while (x.next) {//如果x有下一个节点,链上下一个节点,没有的话什么都不做
x = x.next;
}
// x.next === null //x 是最后一个节点
x.next = node;//设node是x的下一个节点
return node;
};
const removeFromList = (list, node) => {
let x = list;
let p = node; // 将 p 初始化改为 node
while (x !== node && x !== null) { // 如果 node 不在 list 中,x 就可能为 null
p = x;
x = x.next;
//说明node不是要删的节点,找下一个
}
if(x === null){ // 若 x 为 null,则不需要删除,直接 return, false 表示无法删除不在list里的节点
return false
}else if(x === p){ // 这说明要删除的节点是第一个节点
p = x.next
return p // 如果删除的是第一个节点,那么就要把新 list 的头节点 p 返回给外面,即 newList = removeFromList(list, list)
}else{
p.next = x.next;//删除执行
return list // 如果删除的不是第一个节点,返回原来的 list 即可
}
};
const createNode = value => {
return {
data: value,
next: null
};
};
const travelList = (list, fn) => {
let x = list;
while (x !== null) {
fn(x);
x = x.next;
}
};
const list = createList(10);//增
const node2 = appendList(list, 20);
const node3 = appendList(list, 30);
const node4 = appendList(list, 40);
const removeFromList = (list, node3)//删
travelList(list, node => {
console.log(node.data);
});