题解 | #链表中的节点每k个一组翻转#(头插法&边插入边走)

链表中的节点每k个一组翻转

http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

/** 想想大牛 怎么做
反转链表, 头插法 需要一个头指针
建立一个头指针 
k-1次头插,更新 头指针 
*/

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        if(head == NULL||k==1) return head;
        ListNode *res = new ListNode(0);
        res->next = head; // 建立一个头指针
        int len = 0;
        ListNode *pre = res, *cur = head, *tmp;

        while(head != NULL){
            len++;
            head = head->next;
        }

        for(int i = 0; i < len/k; i++){
            for(int j = 1; j < k; j++){ // 头插法k-1次
                tmp = cur->next; // tmp 代表摘下的节点
                cur->next = tmp->next; // 将节点摘下
                tmp->next = pre->next; // 将摘下的节点连接到
                pre->next = tmp;
            }
            pre = cur; // 更改头指针 为上一个翻转的尾结点
            cur = cur->next; // 指向下一组的第一个结点。
        }

        return res->next;

        }
};
全部评论

相关推荐

02-12 17:30
已编辑
字节跳动_实习生(实习员工)
要怎么办呢牛:我觉得大厂日常实习最大的意义就是给自己背书,一个好公司的实习就像一个好学历似的,能够给自己增加一个标签,让别人觉得你可以。(至于真正实习干了啥,这个感觉并不太重要)。当然一家之言,仅供参考。另外,楼主已经很强了,实习毕业双双拿下,已经领先好多好多人了,羡慕啊
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客企业服务