题解 | #链表中的节点每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; } };