注意递归调用,以及中途计算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; } };