Skip to content
目录

//创建链表

javascript
let 链表 = [ 1, 2, 3, 4 ,5]
// 用一个匿名对象作为链表上的节点,如下伪代码:
function generateNode(data) {
    return {
        data: data, // 数据域
        next: null, // 前驱指针
        // prev: null // 后继指针
    }
}
// 声明变量 HEAD, TAIL, POINTER & length 分别指代「头指针」,「尾指针」,「游标指针」和 「链表长度」,那么构建一个双向链表如下伪代码:
let HEAD, TAIL, POINTER, length = 0;
// 创建一条长度为5的双向链表
链表.forEach((data, index, arr) => {
    let node = generateNode(data);
    // 第一个节点
    if (index === 0{
        HEAD = node;
    }
    else {
        // 指定前驱后继指针
        [/* node.prev,  */POINTER.next= [/* POINTER, */ node];
        // 最后一个节点
        index === arr.length - 1 && (TAIL = node)
    }
    // 指向当前节点
    POINTER = node;
    ++length;
});
// 游标指针回退到头部
POINTER = HEAD;

//k个为1组去反转链表

javascript
'k个为1组去反转链表'
var reverseKGroup = function (head, k) {
    /*
        给定这个链表:1->2->3->4->5
        当 k = 2 时,应当返回: 2->1->4->3->5
        当 k = 3 时,应当返回: 3->2->1->4->5
    */
    if (head === null || k === 1{
        return head;
    }

    let cnt = 0;
    const dummy = {
        next: head,
    };
    let start = dummy;
    let end = head;

    while (end !== null{
        cnt++;
        if (cnt % k !== 0{//end不是第k个
            end = end.next;
        } else {//end是第k个
            start = reverseList(start, end.next);//每次反转该组头尾之间的所有节点
            end = start.next;// 然后将链表重新拼起来即可
        }
    }

    return dummy.next;
};
        '用来反转链表的方法'// 翻转head到tail之间的部分,不包括head和tail   // 返回原链表的第一个元素,也就是翻转后的最后一个元素
        reverseList= (s, e) => {//输入两个链表
            if (s === null || s.next === nullreturn s;
            let cur = s.next;
            first = cur;
            let pre = s; // 这里就是翻转不包括head的原因,否则就是head.pre了(当然我们没有pre指针)
            // 这里就是翻转不包括tail的原因,否则就是tail.next了。
            while (cur !== e{
                const next = cur.next;
                cur.next = pre;
                pre = cur;
                cur = next;
            }
            // 拼接
            s.next = pre;
            first.next = cur;
        
            return first;
        }
reverseKGroup(HEAD,2)
本站总访问量 次 本站访客数 人次

1111111111111111111