转载请标明出处http://www.cnblogs.com/haozhengfei/p/9e6f4dda3138cf9fab17f996ec85b624.html


链表的K逆序问题

 

 
链表的k逆序

第7节 链表的k逆序练习题

有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1->2->3->4->5->6->7->8->null,K=3这个例子。调整后为,3->2->1->6->5->4->7->8->null。因为K==3,所以每三个节点之间逆序,但其中的7,8不调整,因为只有两个节点不够一组。

给定一个单链表的头指针head,同时给定K值,返回逆序后的链表的头指针。

Java (javac 1.7)

代码自动补全

 
 
 
 
 
1
import java.util.*;
2

3
/*
4
public class ListNode {
5
    int val;
6
    ListNode next = null;
7

8
    ListNode(int val) {
9
        this.val = val;
10
    }
11
}*/
12
public class KInverse {
13
    public ListNode inverse(ListNode head, int k) {
14
        if (k < 2) {
15
            return head;
16
        }
17
        ListNode cur = head;//正在遍历的当前节点
18
        ListNode start = null;
19
        ListNode pre = null;
20
        ListNode next = null;//待遍历的下一个节点
21
        int count = 1;
22
        while (cur != null) {
23
            next = cur.next;
24
            if (count == k) {//count满足要求开始进行逆序
25
                start = pre == null ? head : pre.next;
26
                head = pre == null ? cur : head;
27
                resign(pre, start, cur, next);
28
                pre = start;
29
                count = 0;
30
            }
31
            count++;
32
            cur = next;
33
        }
34
        return head;
35
    }
36
    public void resign(ListNode left, ListNode start, ListNode end,
37
            ListNode right) {
38
        ListNode pre = start;
39
        ListNode cur = start.next;
40
        ListNode next = null;
41
        while (cur != right) {
42
            next = cur.next;
43
            cur.next = pre;
44
            pre = cur;
45
            cur = next;
46
        }
47
        if (left != null) {
48
            left.next = end;
49
        }
50
        start.next = right;
51
    }
52
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
运行

 

算法--链表的K逆序问题的更多相关文章

  1. SDUT OJ 数据结构实验之链表二:逆序建立链表

    数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  2. SDUT-2117_数据结构实验之链表二:逆序建立链表

    数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入整数个数N,再输入N个整数,按照 ...

  3. 数据结构实验之链表二:逆序建立链表(SDUT 2117)

    题目链接 #include <bits/stdc++.h> using namespace std; struct node { int data; struct node *next; ...

  4. POJ 2541 Binary Witch(逆序KMP,好题)

    逆序KMP,真的是强大! 参考链接,下面有题意解释:http://blog.sina.com.cn/s/blog_6ec5c2d00100tphp.htmlhttp://blog.csdn.net/s ...

  5. C语言 · 字串逆序

    算法训练 字串逆序   时间限制:1.0s   内存限制:512.0MB      问题描述 给定一个字符串,将这个串的所有字母逆序后输出. 输入格式 输入包含一个字符串,长度不超过100,字符串中不 ...

  6. [算法] 将单链表的每K个节点之间逆序

    题目 给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 解答 使用栈结构 import java.util.Stack; pu ...

  7. 算法总结之 将单链表的每K个节点之间逆序

    给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点 思路: 如果k的值小于2,不调整.k<1 没有意义,k==1代 ...

  8. 单链表的前K个的逆序输出

    单链表逆序输出也是常被面试官问到题算法题,所以自己就总结了一下,在此贴出算法,与小伙伴们相互交流. 首先要有三个指针,前两个分别指向首节点,首节点的下一个节点,第三个是临时指针,是为了储存首节点的下一 ...

  9. 将单链表的每K个节点之间逆序

    [说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“将单链表的每K个节点之间逆序”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明, ...

随机推荐

  1. java调优(一)

  2. 微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信小程序红包开发语音红包

    公司最近开发的一个微信语音红包,就是前些时间比较火的包你说红包小程序.如何提高识别的精准度呢. 在说精准度之前,先大概说下整个语音识别的开发流程.前面我有文章已经说到过了.具体我就不谈了.一笔带过. ...

  3. Django学习日记06_视图_URLconf、View

    URLconf Django通过URLconf来响应网页请求,在项目设置settings.py中,设定了ROOT_URLCONF值来指定默认的URLconf(即mysite.urls),当HTTPRe ...

  4. Python学习_06_文件、IO

    文件对象 python中的文件操作和c语言比较类似,包括一些缓冲.偏移量的方式. 文件对象可以通过open().file()两个内建方法创建,两个方法并没有什么不同,使用方法和c语言中的fopen() ...

  5. [SharePoint]解决用户权限被无缘无故自动删除的问题

    前几天在维护公司内网的时候接到了一个case, 说是某个用户的权限无缘无故的就会被SharePoint自动去掉. 刚开始我还不愿意相信这个用户的说法,认为可能是权限赋的方法不对,有可能是被其他人误删了 ...

  6. Java使用RSA加密算法对内容进行加密

    什么是RSA加密算法 RSA是一种典型的非对称性加密算法,具体介绍可参考阮一峰的日志 RSA算法原理 下面是使用RSA算法对传输内容进行加密的一个简要Java案例,主要用到了三个类,大体实现如下: 对 ...

  7. 轻量级弹出框 lightbox

    1. 引入  lightbox.css 和 lightbox.js 2.检查 CSS 并确定调用的 prev.gif 和 next.gif 文件在正确的位置. 同样要确定调用的 loading.gif ...

  8. c#之依赖注入

    C# 依赖注入 http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 1 IGame游戏公司的故事 1.1 讨论会 话说有一个叫 ...

  9. 不要错过iost币的免费派发机会

    2013 年 ripple 币曾经进行免费派发,而现在瑞波币兑CNY价格最高曾经达到20元, 如果你错过了 ripple 币,就不要错过这次李笑来和徐小平等背书 iost 币的免费派发

  10. 【转载】小结一下linux 2.6内核的四种IO调度算法

    在LINUX 2.6中,有四种关于IO的调度算法,下面综合小结一下: 1) NOOP NOOP算法的全写为No Operation.该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺 ...