代码精简技巧

前言:

  记录看到大神们精简技代码的技巧。

 

 

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;
};

 

 

 

posted @ 2020-03-18 23:08  TTtttt5  阅读(176)  评论(0编辑  收藏  举报