前言:
记录看到大神们精简技代码的技巧。
var swapPairs = function(head) { // 1. 确认 head 大于等于两个,否则返回; if (!head || !head.next) return head; // 2. 新建链表哨兵头并创建指针curr; let res = new ListNode(null); res.next = head; let prev = res; // 3. 循环开始 // 3.1 走两步,存为fst, snd; // 3.2 哨兵->snd, fst->snd.next, snd->fst; // 3.3 推进 curr = curr.next.next; while (prev.next && prev.next.next) { let [fst, snd] = [prev.next, prev.next.next]; [prev.next, fst.next, snd.next] = [snd, snd.next, fst]; prev = prev.next.next; } // 4. 返回res.next; return res.next; }; var swapPairs = function(head) { // 自递归思路: // 1. 确认head大于等于两个,否则返回 if (!head || !head.next) return head; // 2. 获得第二个节点; let next = head.next; // 3. 第一个节点指向第三个节点, 传入第三个节点开始递归,获得已排序的链表; head.next = swapPairs(next.next); // 4. 第二个节点指向第一个节点 next.next = head; // 5. 返回第二个节点; return next; }; var swapPairs = function(head) { if (!head || !head.next) return head; let [fst, snd] = [head, head.next]; [fst.next, snd.next] = [swapPairs(snd.next), fst]; return snd; };