目录
- 题目
- 法一、迭代
- 法二、递归
题目
- 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
法一、迭代
var swapPairs = function(head) {let dummy = {next:head}let p1 = dummywhile(p1.next && p1.next.next){let p2 = p1.nextlet p3 = p2.next//交换p2和p3p1.next = p3p2.next = p3.nextp3.next = p2//移动指针p1 = p2}return dummy.next
};
法二、递归
var swapPairs = function(head) {// 基本情况:如果链表为空或只有一个节点,直接返回头节点if (!head || !head.next) {return head;}// 记住前两个节点let first = head;let second = head.next;// 递归交换后续节点,并将结果连接到当前交换的节点上first.next = swapPairs(second.next);second.next = first;// 返回新的头节点(第二个节点)return second;
};
- 比较难理解,