单链表每k个节点为一组进行反转(最后不满k个时不反转)
public class LinkReverse2 {
public static Node mhead=null;
public static Node mtail=null;
public static Node newLink(int n){
Node head = new Node();
head.setData(1);
head.setNext(null);
Node tmp = head;
for(int i=2;i<=n;i++){
Node newNode = new Node();
newNode.setData(i);
newNode.setNext(null);
tmp.setNext(newNode);
tmp = newNode;
}
return head;
}
public static void main(String[] args) {
Node node = newLink(10);
pritNode(node);
// Node node1 = reverseKLink(node,3);
// Node node1 = reverse(node,2);
Node node1 = reverseLink3(node,4);
pritNode(node1);
}
public static void pritNode(Node head){
Node temp = head;
while(temp !=null){
System.out.print(temp.getData()+"->");
temp = temp.getNext();
}
System.out.println();
}
/*public static Node reverseLink(Node head){
Node pre=null,cur=head,next=null;
while(cur!=null){
next=cur.getNext();
cur.setNext(pre);
pre=cur;
cur=next;
}
return pre;
}*/
/*public static Node reverseKLink(Node head,int k){
Node pre=null,cur=head,next=null;
Node pnext=null,global_head=null;
int i=0;
Node tmp=null;
while(cur!=null){
next = cur.getNext();
if(tmp==null) tmp=cur; //tmp记录当前组反转完最后一个节点
if(pnext!=null) pnext.setNext(cur); //pnext是上一组反转完最后一个节点
cur.setNext(pre);
pre=cur;
cur = next;
i++;
if(i>=k){ //当前组反转完成的时候
if(global_head==null){
global_head=pre;
}
if(pnext!=null){ //将上一组反转完的最后一个节点指向 当前组反转完后的第一个节点
pnext.setNext(pre);
}
pnext=tmp; //迭代
i=0; //新的一组反转时 关键数据初始化
tmp=null;
pre=null;
}
}
return global_head;
}*/
//反转每组
public static void inreverse(Node left,Node right){
Node pre=null,cur=left,next=null;
while(pre!=right){
next = cur.getNext();
cur.setNext(pre);
pre=cur;
cur=next;
}
if(mtail!=null) mtail.setNext(right);
mhead=right;
mtail=left;
}
//每k个节点为一组反转
public static Node reverseLink3(Node head,int k){
Node cur=head,global_head=head;
int i=1;
Node left=null,right=null;
while(cur!=null){
if(i%k==1)
left=cur;
right=cur;
cur=cur.getNext();
if(i%k==0){
inreverse(left,right);
if(mtail!=null){
mtail.setNext(cur);
}
if(global_head==head){
global_head = mhead;
}
}
i++;
}
return global_head;
}
}
单链表每k个节点为一组进行反转(最后不满k个时不反转)的更多相关文章
- LeetCode Reverse Nodes in k-Group 每k个节点为一组,反置链表
题意:给一个单链表,每k个节点就将这k个节点反置,若节点数不是k的倍数,则后面不够k个的这一小段链表不必反置. 思路:递归法.每次递归就将k个节点反置,将k个之后的链表头递归下去解决.利用原来的函数接 ...
- 用O(1)的时间复杂度删除单链表中的某个节点
给定链表的头指针和一个结点指针,在O(1)时间删除该结点.链表结点的定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 函数的声明如下: ...
- 【剑指offer】单链表尾部插入一个节点
#include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...
- 含头结点的单链表C++实现(包含创建,查找,插入,追加,删除,反转,排序,合并,打印,清空,销毁等基本操作)
温馨提示:下面代码默认链表数据为字符型,本代码仅供参考,希望能对找到本随笔的人有所帮助! #include<iostream> using namespace std; typedef s ...
- [LintCode] Delete Node in the Middle of Singly Linked List 在单链表的中间删除节点
Implement an algorithm to delete a node in the middle of a singly linked list, given only access to ...
- 【链表问题】打卡9:将单链表的每K个节点之间逆序
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下 ...
- 【链表问题】打卡2:删除单链表的第 K个节点
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题.每道题会提供简单的解答. 题目描述 在单链表中删除倒数第 K 个节点 要求 如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 ...
- Java带头节点单链表的增删合并以及是否有环
带头节点单链表 1.优势: 1)当链表为空时,指针指向头结点,不会发生null指针异常 2)方便特殊操作(删除第一个有效节点或者插入一个节点在表头) 3)单链表加上头结点之后,无论单链表是否为空,头指 ...
- C语言实现单链表(不带头结点)节点的插入
对单链表进行增删改查是最主要的操作.我在上一篇博客<C语言实现链表节点的删除>实现了删除单链表中的某个节点. 这里我们要来实如今某个位置插入节点.演示样例代码上传至https://gith ...
随机推荐
- 津津的储蓄计划 2004年NOIP全国联赛提高组
题目描述 Description 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以 ...
- mongodb之安装
前言 系统环境是CentOS,linux只支持64位版本 yum源安装 rpm包说明 mongodb-org-server 包含mongod进程,关联配置,初始化脚本mongodb-org-mongo ...
- ORA-12547错误
http://www.linuxidc.com/Linux/2013-03/81330p3.htm << good http://www.verydemo.com/demo_c158_i6 ...
- HDU 5293
树上DP题. 其实有点类似于01的问题.方程很容易想到.首先,因为一条链的节点其实都是在树上的,所以很容易想到应该先求一个LCA.然后,当某节点不是链的LCA时,它的转移就是: dp[i]=sum[i ...
- Zepto Code Rush 2014-A. Feed with Candy(HACK)
A. Feed with Candy time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- CentOS下安装使用phpMyAdmin. Set up phpMyAdmin on CentOS
须要组件: Apache PHP Mysql phpMyAdmin Apache 0. yum install httpd 1. 确认版本号 $ httpd -v 2. 启动apache $ sudo ...
- 【Linux】Linux下配置apache
一.获取软件: http://httpd.apache.org/ httpd-2.4.10.tar.gz 二.安装步骤: 解压源文件: 1) tar zvxf httpd-2.4.10.tar. ...
- 浅谈EL与JSTL
讲道理,自己在博大精深的Java世界里还只是一个很小很小的菜鸟.处于成长与学习之中,但学习一个漫长的过程.尤其对于那些知识点我觉得总结是尤为重要的.反正在我看来这段时间里虽然过了很多知识但却是一脸懵逼 ...
- vim gvim技巧大全(9)(转载)
vim gvim技巧大全(9) 2 用命令}移动到这个段落的底部,标记为b3 输入命令:'a,'b move来移动文本.老版本的Vi编辑器不能很好的来处理多文件.但是Vim在处理多文件上却显得优秀得多 ...
- QQ 临时会话+图标 HTML代码
啦啦啦 QQ会话的HTML代码 <a target="_blank" href="http://wpa.qq.com/msgrd?v=3& uin=2553 ...