题解 | #链表中的节点每k个一组翻转#

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

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

注意递归调用,以及中途计算node的个数是否满足k,如果不满足,返回head即可,还有注意head->next其实已经是反转后的最后一个节点了,所以head->next 就直接接受上一个迭代返回的前驱节点即可。

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here

        if(!head || k<=1){
            return head;
        }


        ListNode* pre_node = NULL;
        ListNode* cur_node = head;
        ListNode* next_node = NULL;

        for(int i = 0;i<k;i++){
            if(!cur_node) return head;
            cur_node = cur_node->next;
        }

        cur_node = head;

        for(int i = 0; i< k; i++){
            next_node = cur_node->next;
            cur_node->next = pre_node;
            pre_node = cur_node;
            cur_node = next_node;
        }

        head->next = reverseKGroup(next_node,k);

        return pre_node;




    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

牛牛不会牛泪:脉脉太多这种了,纯水军
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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