注意递归调用,以及中途计算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;
}
};
京公网安备 11010502036488号