题解

将单链表的每K个节点之间逆序

http://www.nowcoder.com/questionTerminal/66285653d28b4ed6a15613477670e936

vector<list_node*> reverseN(list_node * head1, int K) {
    list_node* pre = nullptr;
    list_node* next = nullptr;
    vector<list_node*> res;
    res.push_back(head1);
    while(K--) {
        next = head1->next;
        head1->next = pre;
        pre = head1;
        head1 = next;
    }
    res.push_back(pre);
    res.push_back(head1);
    return res;
}

list_node * reverse_knode(list_node * head1, int K)
{
    //////在下面完成代码
    list_node* cur = head1;
    int n = 0;
    while(cur != nullptr) { n++; cur = cur->next; }
    n /= K; //逆序n次

    vector<list_node*> p; //p[0]:逆序后的尾节点 p[1]:逆序后的头节点 p[2]:逆序后的下一个节点
    vector<vector<list_node*>> list; //每次逆序的P放入list中
    while(n--) {
        p = reverseN(head1, K); //依次逆序K个节点
        list.push_back(p);    //存入P
        head1 = p[2];    //下一个节点给head1
    }
    //将list中的节点头尾相连
    for(int i=0; i<(int)list.size()-1; i++) {
        list[i][0]->next = list[i+1][1];
    }
    list[(int)list.size()-1][0]->next = head1; //接入剩下的节点
    return list[0][1];
}
全部评论

相关推荐

09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
在看牛客的社畜很积极:身高体重那一行信息去掉,学校那一行的信息放上面,找半天都没找到你是哪个学校什么专业的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务