24.两个一组翻转链表
使用递归方法:
var swapPairs = function(head) {
// base case:当头节点和头节点下一个节点都为空,则返回
if (head === null || head.next === null) {
return head
}
// 第二个节点
const next = head.next
// 从第三个节点开始,进行递归
const newNode = swapPairs(next.next)
// 第二个节点的下一个是第一个节点
next.next = head
// 第一个节点的下一个节点是递归后的结果
head.next = newNode
// 返回第二个节点
return next
};
19.删除链表的倒数第n个节点
使用快慢指针,先走到n节点处,再一起向前直到快指针指向链表的尾部。这时候慢指针会正好在len-n处
var removeNthFromEnd = function(head, n) {
let fast = head;
while (n > 0) {
fast = fast.next;
n -= 1;
}
let slow = head;
const dummy = new ListNode(-1, head);
let prev = dummy;
while (fast !== null) {
slow = slow.next;
fast = fast.next;
prev = prev.next;
}
prev.next = slow.next;
return dummy.next;
};