给出一个链表,一次翻转 k 个指针节点,并返回修改后的链表。
k 是一个正整数,并且小于等于链表的长度。如果指针节点的数量不是 k 的整数倍,那么最后剩余的节点应当保持原来的样子。
你不应该改变节点的值,只有节点位置本身可能会改变。
题目应当保证,仅使用恒定的内存。
例如,
给定这个链表:1->2->3->4->5
当 k = 2时,应当返回: 2->1->4->3->5
当 k = 3时,应当返回: 3->2->1->4->5
详见:https://leetcode.com/problems/reverse-nodes-in-k-group/description/

实现语言:Java

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if(head==null||k==1){
return head;
}
ListNode dummy=new ListNode(-1);
ListNode pre=dummy;
ListNode cur=head;
dummy.next=head;
int i=0;
while(cur!=null){
++i;
if(i%k==0){
pre=reverseOneGroup(pre,cur.next);
cur=pre.next;
}else{
cur=cur.next;
}
}
return dummy.next;
}
private ListNode reverseOneGroup(ListNode pre,ListNode next){
ListNode last=pre.next;
ListNode cur=last.next;
while(cur!=next){
last.next=cur.next;
cur.next=pre.next;
pre.next=cur;
cur=last.next;
}
return last;
}
}

实现语言:C++

/**
* 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) {
if(!head||k==1)
{
return head;
}
ListNode* dummy=new ListNode(-1);
ListNode* pre=dummy;
ListNode* cur=head;
dummy->next=head;
int i=0;
while(cur)
{
++i;
if(i%k==0)
{
pre=reverseOneGroup(pre,cur->next);
cur=pre->next;
}
else
{
cur=cur->next;
}
}
return dummy->next;
}
ListNode* reverseOneGroup(ListNode* pre,ListNode* next)
{
ListNode* last=pre->next;
ListNode* cur=last->next;
while(cur!=next)
{
last->next=cur->next;
cur->next=pre->next;
pre->next=cur;
cur=last->next;
}
return last;
}
};

参考:https://www.cnblogs.com/grandyang/p/4441324.html

025 Reverse Nodes in k-Group 每k个一组翻转链表的更多相关文章

  1. [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 ...

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

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

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

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

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

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

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

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

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

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

  7. [Leetcode] 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 ...

  8. [LeetCode] 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 ...

  9. leetcode: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 ...

随机推荐

  1. 一个有关Golang变量作用域的坑

    转自:http://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/ 临近下班前编写和调试一段Golang代码,但运行结果始终 ...

  2. qtp ie_hook

    今天要讲的内容是注册异类子控件授予强制HOOK,名字有点抽象,简单的说就是在一个QTP可识别的A类插件窗口对象中存在着B类插件的控件对象, 最常见的例子就是在应用程序中内嵌一个Browser对象子控件 ...

  3. 问题:C#调webservice超时;结果:C#调用webservice服务超时

    C#调用WebService服务时,报错,The operation has timed out,意思是“操作超时”. 方法/步骤 首先修改服务端配置 WebService服务所在站点为服务端,它提供 ...

  4. LAMP 1.2 Apache编译安装

    1.下载                                                                                                 ...

  5. 关于Synchronized关键字锁住对象的嵌套问题

    如果在子关键字代码块中调用了sleep,是否会保留有所的锁?

  6. BeanFactory和ApplicationContext的介绍

    ------------------siwuxie095                             Spring 通过一个配置文件描述 Bean 和 Bean 之间的依赖关系, 利用 J ...

  7. html css将图片或div置于顶层

    在做这个功能时,图片被挡住了.. 解决办法 在这个图片的css里加上z-index:数字:(数字可以为正也可以为负数) z-index:1肯定在z-index:-1的上面 用这个属性来给div分层 是 ...

  8. 部署到IIS上上传不了文件

    应用程序池改一下

  9. Ubuntu 安装 samba 实现文件共享和source insight 阅读uboot

    环境:win10 + 虚拟机Ubuntu 12.04 一. samba的安装: # sudo apt-get install samba # sudo apt-get install smbfs 二. ...

  10. MATLAB求微分

    求微分 diff(函数) , 求的一阶导数;diff(函数, n) , 求的n阶导数(n是具体整数);diff(函数,变量名), 求对的偏导数;diff(函数, 变量名,n) ,求对的n阶偏导数; & ...