5. 两两交换链表中的节点
- 递归法
var swapPairs = function(head) {
if (head === null|| head.next === null) {
return head;
}
const newHead = head.next;
head.next = swapPairs(newHead.next);
newHead.next = head;
return newHead;
};
- 迭代法
6. 删除链表的倒数第n个节点
- 快慢指针
var removeNthFromEnd = function(head, n) {
let slow = head, fast = head;
while(n--) {
fast = fast.next;
}
if(!fast) {
return head.next;
}
while(fast.next) {
slow = slow.next;
fast = fast.next;
}
slow.next = slow.next.next;
return head;
};
7. 链表相交
- 哈西集合方法
var getIntersectionNode = function(headA, headB) {
const visited = new Set();
let temp = headA;
while (temp !== null) {
visited.add(temp);
temp = temp.next;
}
temp = headB;
while (temp !== null) {
if (visited.has(temp)) {
return temp;
}
temp = temp.next;
}
return null;
};
8. 环形链表
- 哈希表法
var detectCycle = function(head) {
const visited = new Set();
while (head !== null) {
if (visited.has(head)) {
return head;
}
visited.add(head);
head = head.next;
}
return null;
};