特点
- 数据呈线性排列,元素存储不连续,用next指针连接。
- 添加和删除比较方便,访问比较耗时;
操作
数据结构
function ListNode(val) {
this.val = val;
this.next = null;
}
const blue = new ListNode('Bule');
const yellow = new ListNode('Yellow');
const red = new ListNode('Red');
blue.next = yellow;
yellow.next = red;
let p = blue;
while(p){
console.log(p.val);
p = p.next;
}
blue.next = red;
console.log(blue.next.val);

练习题
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next;
};
var reverseList = function(head) {
let p1 = head;
let p2 = null;
while(p1) {
const temp = p1.next;
p1.next = p2;
p2 = p1;
p1 = temp;
}
return p2;
};
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;
};
var addTwoNumbers = function(l1, l2) {
let l3 = new ListNode(0);
let p1 = l1;
let p2 = l2;
let p3 = l3;
let temp = 0;
while(p1||p2){
let val1 = p1?p1.val:0;
let val2 = p2?p2.val:0;
let val3 = val1+val2+temp;
val3= val3>9?val3%10:val3;
temp = Math.floor((val1+val2+temp)/10);
p3.next = new ListNode(val3);
if (p1) p1 = p1.next;
if (p2) p2 = p2.next;
p3 = p3.next;
}
if (temp) p3.next = new ListNode(temp);
return l3.next;
};
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
};