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

全部评论

相关推荐

06-10 23:36
已编辑
首都经济贸易大学 C++
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务