前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K 个一组翻转链表

K 个一组翻转链表

作者头像
程序员小王
发布2022-01-18 14:47:10
2400
发布2022-01-18 14:47:10
举报
文章被收录于专栏:架构说架构说

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

题目

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

思路

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

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

细节:

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

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

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

代码语言:javascript
复制
 //移动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
复制
/*
 * @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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
  • 细节:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档