K 个一组翻转链表 力扣

【玩转校招算法面试】第三天:链表中的节点每k个一组翻转(动画演示、手写 Java 代码、详细注释、LeetCode 高频算法题)_哔哩哔哩_bilibili

  1. 初始状态:1 -> 2 -> 3,pre = null, cur = 1
  2. 保存当前节点的下一个节点:next = 2
  3. 将当前节点指向前一个节点:1 -> null
  4. 更新前一个节点和当前节点:pre = 1, cur = 2
  5. 保存当前节点的下一个节点:next = 3
  6. 将当前节点指向前一个节点:2 -> 1 -> null
  7. 更新前一个节点和当前节点:pre = 2, cur = 3
  8. 保存当前节点的下一个节点:next = null
  9. 将当前节点指向前一个节点:3 -> 2 -> 1 -> null

for (int i = 0; i < k; i++) {1 2 3

                ListNode nxt  2 = cur.next; 

                cur.next = pre;根据后面2就会指向1

                pre = cur; 1

                cur = nxt;2

            }

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
      ListNode *dum=new ListNode(-1,head);
       ListNode *t = head;
        int n = 0;
        while (t != nullptr) {
            n++;
            t = t->next;
        }
      ListNode* end=dum;//end用于保存当前待反转部分的头部
ListNode* cur=dum->next;//cur指向当前节点,带反转区域的第一个节点
     ListNode *pre=nullptr;// pre指向cur(当前节点)的前一个节点
    while(n>=k){//当链表中剩余节点数大于等于 k 时执行循环体内的代码
         n=n-k;//更新剩余节点数。
      ListNode *p1=cur;//记录当前位置
      for(int i=0;i<k;i++){// 反转k个节点
       ListNode *nxt=cur->next;
        cur->next=pre;
        pre=cur;
        cur=nxt;}
//pre会变成反转后最后一个节点,将上一组反转后的最后一个节点指向当前组反转后的最后一个节点
        end->next=pre;
        pre=nullptr;//重新下一次
        end=p1;此时p1所表示的cur已经反转到了后面,p0在下一个开始的前面
      }
 end->next = cur;//上一组反转后的尾部(即 end指向的节点)与当前组的头部(即 cur 指向的节点)连接起来,保持整个链表的连续性。
        return dum->next;}};

  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苹果苹果梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值