2025年k个一组翻转链表(力扣题目 C语言解法)

k个一组翻转链表(力扣题目 C语言解法)目录 图示 代码 给你一个链表 每 k 个节点一组进行翻转 请你返回翻转后的链表 k 是一个正整数 它的值小于或等于链表的长度 如果节点总数不是 k 的整数倍 那么请将最后剩余的节点保持原有顺序 示例 1 输入 head

大家好,我是讯享网,很高兴认识大家。

目录

图示:

 代码:


给你一个链表,每 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 1:


讯享网

输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 

讯享网

示例 2:

讯享网输入:head = [1,2,3,4,5], k = 3 输出:[3,2,1,4,5]

示例 3:

输入:head = [1,2,3,4,5], k = 1 输出:[1,2,3,4,5]

示例 4:

讯享网输入:head = [1], k = 1 输出:[1]

 以上是力扣上的一道K个一组翻转单链表的题目。我的解题思路如下:

第一步:算出链表有几个节点,用总节点个数除以k,算出一共要翻转几组。

第二步:把链表每k个一组进行翻转,然后把翻转后的单独的一组拆下来依次尾插到给定的(自己定义的)头节点之后。

第三步:把没有翻转的最后一部分链接在最后。

图示:

初始时的链表:

第一次翻转拼接后:

第二次翻转拼接后:

第三次拼接:

 代码:

struct ListNode* reverseKGroup(struct ListNode* head, int k){ int x=k; int count=0;//算出链表有多少个节点 struct ListNode s;//给出一个头节点,方便进行插入 struct ListNode* cur=&s;//指向给出的头节点 struct ListNode* slow=head; struct ListNode* fast=NULL; struct ListNode* prev=NULL; while(slow){ count++; slow=slow->next; } slow=head; count/=k;//算出到底要进行几次翻转 for(int i=0;i<count;i++){ while(x){//进行翻转 fast=slow->next; slow->next=prev; prev=slow; slow=fast; x--; } cur->next=prev; while(cur->next){//cur向前走,为下一次拼接做准备 cur=cur->next; } prev=NULL;//必须置空,保证下一次cur向前走不会死循环 x=k; } cur->next=slow;//最后链接没有被翻转的部分 return s.next; }

 注意:先要了解逆置链表的方法,然后这道题目就容易了。

小讯
上一篇 2025-01-25 18:07
下一篇 2025-03-09 22:53

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18286.html