题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
/**不算难,个人观点。
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode*dunny=new ListNode(0);//链表反转带个头结点事半功倍
dunny->next=head;
ListNode*a=head;
int l=0;
while(a!=nullptr){a=a->next;l++;}//计算当前链表有几个元素,方便下面的while循环,
//当然也可以用递归来做,注意判断条件就行。
ListNode*pre=dunny;//反转链表需要三个两两相连的指针,其中pre指向的空间不会加入反转。
ListNode*curr=head;
while(l>=k){
ListNode*first=pre->next;//就暂且叫这个first指针为辅助锚定指针吧,用于第n组循环时定位pre指针。
ListNode*next=curr->next;
for(int i=1;i<k;i++){
curr->next=next->next;//反转代码,无需介绍。
next->next=pre->next;
pre->next=next;
next=curr->next;
}
pre=first;//定位指针。
curr=next;
l-=k;
}
return dunny->next;
}
};
查看20道真题和解析