一、题目解析

1、每k个一组进行翻转
2、不允许单纯交换节点内部的值
二、算法原理
解法:模拟
1、遍历链表得到总节点数n,n/=k,得到需要翻转的组数n
利用cur遍历链表,若cur不为空,则n++,cur=cur->next
2、重复n次,长度为k的链表逆序,使用头插法
我们tmp记录每组第一个插入的节点,为了便于下组头插
3、剩下的直接链接到后面,释放哨兵位头结点
三、代码示例
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k){//先求需要翻转的组数nint n = 0;ListNode* cur = head;while(cur){n++;cur = cur->next;}n/=k;ListNode* newhead = new ListNode(0);cur = head;ListNode* tmp = nullptr,*prev = newhead,*next = nullptr;//重复n次长度为k的链表翻转while(n--){tmp = cur;for(int i = k;i>0;i--){if(cur)next = cur->next;if(cur)cur->next = prev->next;prev->next = cur;cur = next;}prev = tmp;}//链接剩下的节点prev->next = cur;cur = newhead->next;//释放哨兵位头结点delete newhead;return cur;}
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注支持一波,我们下期再见!