25. K 个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
建议先做 206. 反转链表 和 92. 反转链表 II
我的思路是先求出链表长度,然后每次反转k个
class Solution { public: ListNode* successor = NULL; //保存nk+1开始的链表 ListNode* re(ListNode* h){ if(!h||!h->next)return h; ListNode* Node=re(h->next); h->next->next=h; h->next=successor; return Node; } //逆序一个链表 ListNode* reverseKGroup(ListNode* head, int k) { if(!head||!head->next||k==1)return head; int len=0; ListNode* p=head; while(p){ len++; p=p->next; } p=head; ListNode *pre=new ListNode(0); pre->next=head;head=pre; for(int i=0;i<len/k;i++){ ListNode* tmp=pre->next; for(int j=0;j<k-1;j++){ p=p->next; } successor=p->next; p->next=NULL; pre->next=re(pre->next); pre=tmp; p=successor; } return head->next; } };