题解:本题采用递归的方法
/**
* 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
ListNode *newHead;
ListNode *node = head;
int i = 0;
for(i=0;i<k;i++)
{
if(node == NULL)
return head;
node = node -> next;//此时跳出循环时node指向的是下一波反转的头节点
}
newHead = reverse(head,node); //返回的是反转后链表的头
head->next = reverseKGroup(node,k);
return newHead;
}
private:
ListNode *reverse(ListNode *head, ListNode *node)
{//老节点接到新链表的头,pre始终指向新链表的头
ListNode *pre = NULL;
ListNode *ori;
while(head!=node)
{
ori = head->next;
head->next = pre;
pre = head;
head = ori;
}
return pre;
}
};