题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
每k个结点反转一次链表即可,但是注意不足k的话要直接返回。
用递归来写就行。
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode *node=head;
ListNode *ans=node;
if(k==1)
return node;
for(int i=0; i<k; i++)
{
if(!node)
return head;
node=node->next;
}
ans=reverse(head, node);
head->next=reverseKGroup(node, k);
return ans;
}
ListNode* reverse(ListNode *l, ListNode *r)
{
ListNode *pre=r;
while(l!=r)
{
ListNode *nxt=l->next;
l->next=pre;
pre=l;
l=nxt;
}
return pre;
}
};