这道题关于链表的操作,中间指针操作略复杂。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* p=head;//用来遍历链表的指针
ListNode* headpre= new ListNode(-1);//翻转后的链表头部之前的指针,用来返回反转后的head;
headpre->next=head;//当链表长度不足k时,确保返回正确值;
ListNode* pre=headpre;//pre为翻转一小段长度为k的部分时,之前已经翻转好的链表的尾部节点的指针 //每次从p开始向后遍历k个节点,如果p之后节点不足k个,此时flag为1,则break;
//如果p之后节点足够,那么这段长为k的链表首尾分别为[curtail, curhead],对子段进行翻转即可;
while(p!=NULL){
//如果从p往后有k个节点则继续计算,否则return;
//寻找界定的指针[curtail, p2, p3, ... , curhead] p,即p为curhead的下一个节点;
//curtail和curhead分别为将要翻转部分的头和尾(此处curtail和curhead按反转之后的顺序标记头尾)
ListNode* curtail=p;
int flag=0;
for(int i=1;i<k;i++){
p=p->next;
if(p==NULL) {flag=1;break;}
}
if(flag) break;
ListNode* curhead=p;
p=p->next; //然后翻转curt与curh之间的节点;
ListNode* pcur=curtail;
ListNode* pnext=curtail->next;
while(pcur!=curhead){
ListNode* tmp=pnext->next;
pnext->next=pcur;
pcur=pnext;
pnext=tmp;
} //让已经翻转好的部分的尾部指针pre指向刚刚翻转好的这段的头部指针;
//让刚刚翻转好的这段的尾部指针指向后面未反转部分的第一个节点;
//更新pre为curtail;
pre->next=curhead;
curtail->next=p;
pre=curtail;
} return headpre->next;
}
};

改进一下代码:

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* headpre=new ListNode(-1);
headpre->next=head;
ListNode* p=head;
ListNode* pre=headpre; while(p!=NULL){
//获取头尾
ListNode* left=p;
int flag=0;
for(int i=0;i<k-1;i++){
p=p->next;
if(p==NULL){ flag=1;break;}
}
if(flag) break;
ListNode* right=p;
p=p->next;
//进行翻转
ListNode* cur=left;
ListNode* next=left->next;
while(cur!=right){
ListNode* tmp=next->next;
next->next=cur;
cur=next;
next=tmp;
}
pre->next=right;
pre=left;
left->next=p;
}
return headpre->next;
}
};

leetcode25 K 个一组翻转链表的更多相关文章

  1. [Swift]LeetCode25. k个一组翻转链表 | Reverse Nodes in k-Group

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k  ...

  2. [LintCode] Reverse Nodes in k-Group 每k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  3. leetcode 25. K 个一组翻转链表

    # coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...

  4. LeetCode 25. K 个一组翻转链表 | Python

    25. K 个一组翻转链表 题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 题目 给你一个链表,每 k 个节点一组进行翻转 ...

  5. Java实现 LeetCode 25 K个一组翻转链表

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...

  6. LeetCoded第25题题解--K个一组翻转链表--java--链表

    链表 单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素的引用字段链接在一起. 双链表:与单链表不同的是,双链表的每个节点都含有两个引用字段. 链表优点 灵活分配内存空间 能在O ...

  7. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  8. k个一组翻转链表(java实现)

    题目: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定这 ...

  9. [LeetCode]25. Reverse Nodes in k-Group k个一组翻转链表

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...

随机推荐

  1. IO 理论 SOCK理论

    IO密集型程序 在程序执行过程中存在大量IO操作,而CPU操作较少,消耗CPU较少,运行效率较低CPU(计算)密集型程序 在程序执行中,CPU运算较多,IO操作相对较少(消耗CPU大,运行速度快)IO ...

  2. IntelliJ IDEA安装及破解

    百度搜索IntelliJ IDEA,进入官网. 下载完成后进入安装界面 根据自己的情况选择安装路径 等待下载和安装完成. 安装完成 接下来我们运行IntelliJ IDEA 之后这里就要我们进行激活了 ...

  3. 目标检测后处理之NMS(非极大值抑制算法)

    1.定义: 非极大值抑制算法NMS广泛应用于目标检测算法,其目的是为了消除多余的候选框,找到最佳的物体检测位置. 2.原理: 使用深度学习模型检测出的目标都有多个框,如下图,针对每一个被检测目标,为了 ...

  4. 01.CNN调参

    转载:调参是个头疼的事情,Yann LeCun.Yoshua Bengio和Geoffrey Hinton这些大牛为什么能够跳出各种牛逼的网络? 下面一些推荐的书和文章:调参资料总结Neural Ne ...

  5. 《黑白团团》第九次团队作业:Beta冲刺与验收准备

    项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 GitHub链接 Scrum meeting导航 [Beta]Scrum m ...

  6. python常用函数拾零

    Python常用内置函数总结: 整理过程中参考了runoob网站中python内置函数的相关知识点,特此鸣谢!! 原文地址:http://www.runoob.com/python/python-bu ...

  7. Fiddler 显示客户端请求时间,请求耗时,服务器地址

    # 效果图 打开 CustomRules.js (C:\Users\UsersName\Documents\Fiddler2\Scripts):打开 fiddler 时 windows 快捷键 -&g ...

  8. 题解 [BZOJ4710] 分特产

    题面 解析 step 1 我们先考虑下有人没有的情况吧, 那对于每个特产就是放隔板的情况了, 设\(a[i]\)为第\(i\)个特产的个数, 那么第\(i\)个特产的方案数就是\(C_{a[i]+n- ...

  9. Educational Codeforces Round 33 (Rated for Div. 2) D题 【贪心:前缀和+后缀最值好题】

    D. Credit Card Recenlty Luba got a credit card and started to use it. Let's consider n consecutive d ...

  10. P5057 [CQOI2006]简单题 前缀异或差分/树状数组

    好思路,好思路... 思路:前缀异或差分 提交:1次 题解:区间修改,单点查询,树状数组,如思路$qwq$ #include<cstdio> #include<iostream> ...