首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >K 个一组翻转链表

K 个一组翻转链表

作者头像
早起的鸟儿有虫吃
发布于 2022-01-18 06:47:10
发布于 2022-01-18 06:47:10
26900
代码可运行
举报
文章被收录于专栏:算法之美算法之美
运行总次数:0
代码可运行

画图分析:Happy coding! Enjoy Algorithms.第{14}天 lc{ 15} K 个一组翻转链表

题目

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

思路

提示:能用文字表达出来嘛?

翻转链表:需要三个变量 (固定头节点,链表第一个节点,也是翻转后最后一个节点,当前阶段)

细节:

提示:在不运行代码情况下。通过简单例子验证 是否正确。逻辑推理能力。

  • 错误1
  • 错误代码:没有认真检查 核对。

在不运行代码情况下。通过简单例子验证 是否正确。逻辑推理能力。这个没做到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //移动left-1次.【left,right】
    for(int i=0;i<left-1;i++)
    {
        phead =pcur;//?????????phead =ppre
        ppre = pcur;
        pcur =pcur->next;

        cout << "phead =" <<phead->val << " ppre =" <<ppre->val
    << " pcur =" <<pcur->val <<endl;

    }
  • 错误2

pcur =pcur->next; vs pcur =ppre->next;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * @lc app=leetcode.cn id=25 lang=cpp
 *
 * [25] K 个一组翻转链表
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    // ListNode* reverseGroup(ListNode* head,int k);
    ListNode* reverseKGroup(ListNode* head, int k) {
      
      //01 
      if (nullptr == head || nullptr ==head->next || 1 ==k)
      {
          return head;
      }
      
      //02 

      ListNode myhead;
      myhead.next =head;
      int count =0;
      while(head)
      {
          count++;
          head =head->next;
      }
      head =myhead.next;

      //03  循环次数:count/k
 
      ListNode* phead =&myhead;
      ListNode* ppre =head;
      ListNode* pcur =head->next;

       //phead->1(ppre)-->2(pcur)  --3--4 -5

      //默认第一个元素不用翻转,
      //第一个元素翻转后变成最后一个元素
      
     // head>--2---1(pre) ->3(pcur) --4()

     //head>2-1(phead) -->3(ppre) -->4(pcur)
     //len -= k;
     int j =count/k;
      while( j-->0)
      {
          for(int i=0;i<k-1;i++)
          {
               ppre->next =pcur->next;

               pcur->next =phead->next;
               phead->next = pcur;

               pcur =ppre->next;
          }
          if(pcur)
          {
                phead =ppre;
                ppre =pcur;
                pcur =pcur->next;
          }
       

      }
     
     return myhead.next;


    }
};
// @lc code=end


https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/zui-nan-lian-biao-ti-liao-jie-yi-xia-javapythonjav/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
画图分析:回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;
早起的鸟儿有虫吃
2022/01/18
3730
画图分析:回文链表
从青铜到王者:leetcode-奇偶链表
奇偶链表 翻转链表 谷歌刷题打卡03-链表插入排序 奇偶链表代码 class Solution { public: /** 第一次观察: case1特点 01: 头节点保持不变 输入前是1 ,输入后还是1 02: 通过1节点找到2节点,奇数 就是1节点后面追加 最后一个节点就是2 3——>2 ,5 ->2. 特点:都是在2前面,但是2位置并没有发生变化 03:总结:链表特点:翻转后 节点 1 和节点 2位置都没有发生变化。移动是指针。
早起的鸟儿有虫吃
2021/04/26
4340
LeetCode - K个一组翻转链表
该题是四周前做的一道题目,当时写这题时刚好写了前面一题(之后会发出来),然后题目刚好是类似的,只需要稍微换个思路就可以了。这题的难度是困难,真的是为数不多的写出来的困难级别的....
晓痴
2019/07/24
4660
LeetCode - K个一组翻转链表
LeetCode - #25 K 个一组翻转链表
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
Swift社区
2022/04/04
1390
LeetCode - #25 K 个一组翻转链表
K 个一组翻转链表(递归,Kotlin)
你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
一个会写诗的程序员
2020/05/08
5070
【python-leetcode25-翻转链表】K 个一组翻转链表
你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
西西嘛呦
2020/08/26
7390
【python-leetcode25-翻转链表】K 个一组翻转链表
list类
迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。
海盗船长
2020/08/27
1K0
【链表】K 个一组翻转链表
​ 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
利刃大大
2025/05/22
490
【链表】K 个一组翻转链表
Leetcode算法题(链表的中间节点+返回倒数第k个节点+合并两个有序链表)
本题力扣链接:https://leetcode.cn/problems/middle-of-the-linked-list/solutions/164351/lian-biao-de-zhong-jian-jie-dian-by-leetcode-solut/
熬夜学编程的小王
2024/11/20
930
Leetcode算法题(链表的中间节点+返回倒数第k个节点+合并两个有序链表)
LeetCode25:K个一组翻转链表
  给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
别团等shy哥发育
2023/02/25
1790
LeetCode25:K个一组翻转链表
最难链表题——LeetCode题目25:K 个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。
二环宇少
2020/08/13
8740
最难链表题——LeetCode题目25:K 个一组翻转链表
数据结构与算法——单链表
数组:相同元素构成有序的元素集合。数组中存储的元素类型是一致的,数组也是学习编程时最先接触的数据集合。
五分钟学算法
2019/06/18
4550
数据结构与算法——单链表
单链表的应用
上篇博客中,我们学习了单链表,为了更加熟练掌握这一知识点,就让我们将单链表的应用操练起来吧!
用户11039545
2024/04/15
1370
单链表的应用
LeetCode 25. K 个一组翻转链表
说明 : 你的算法只能使用常数的额外空间。 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
Michael阿明
2020/07/13
2880
【LeetCode热题100】【链表】K 个一组翻转链表
叶茂林
2024/04/03
1040
☆打卡算法☆LeetCode 25、 K 个一组翻转链表 算法解析
链接:25. K 个一组翻转链表 - 力扣(LeetCode) (leetcode-cn.com)
恬静的小魔龙
2022/08/07
1510
☆打卡算法☆LeetCode 25、 K 个一组翻转链表  算法解析
【力扣刷题】25. K 个一组翻转链表
你可以设计一个只使用常数额外空间的算法来解决此问题吗? 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。     示例 1:
jayjay
2022/11/02
2830
【力扣刷题】25. K 个一组翻转链表
【数据结构】链表 & 树,你也被绕晕了?不妨来这看看
快慢指针法: 快指针和慢指针初始时指向头节点,当快指针指向和快指针指向节点内的next指针不为空时,快指针一次走两步,慢指针一次走一步,快指针入环后走N圈后慢指针入环,当快指针和慢指针相等时说明存在环,如果出循环则说明不存在环。
_小羊_
2025/04/05
670
【数据结构】链表 & 树,你也被绕晕了?不妨来这看看
「LeetCode」25. K 个一组翻转链表
你可以设计一个只使用常数额外空间的算法来解决此问题吗? 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
Maynor
2021/12/07
1700
「LeetCode」25. K 个一组翻转链表
LeetCode:K个一组翻转链表_25
思路 反转链表II_92的进阶,主要是利用递归思想,拆解重复问题。 题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 进阶: 你可以设计一个只使用常数额外空间的算法来解决此问题吗? 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示例 1: 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 示例 2: 输入:h
Yuyy
2022/06/28
1910
LeetCode:K个一组翻转链表_25
推荐阅读
相关推荐
画图分析:回文链表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验