主要是面试中可能会经常碰上该类似操作,尤其是稍大点公司,面试官可能并不在乎你能不能搞定该题,但是这类型题目最是能体现程序员的思维状态 ---一个迷糊头脑的程序员 怎能立志改变这个世界

  1. /**
  2. * @author luochengcheng
  3. * 定义一个单链表
  4. */
  5. class Node {
  6. //变量
  7. private int record;
  8. //指向下一个对象
  9. private Node nextNode;
  10.  
  11. public Node(int record) {
  12. super();
  13. this.record = record;
  14. }
  15. public int getRecord() {
  16. return record;
  17. }
  18. public void setRecord(int record) {
  19. this.record = record;
  20. }
  21. public Node getNextNode() {
  22. return nextNode;
  23. }
  24. public void setNextNode(Node nextNode) {
  25. this.nextNode = nextNode;
  26. }
  27. }
  28.  
  29. /**
  30. * @author luochengcheng
  31. * 两种方式实现单链表的反转(递归、普通)
  32. * 新手强烈建议旁边拿着纸和笔跟着代码画图(便于理解)
  33. */
  34. public class ReverseSingleList {
  35. /**
  36. * 递归,在反转当前节点之前先反转后续节点
  37. */
  38. public static Node reverse(Node head) {
  39. if (null == head || null == head.getNextNode()) {
  40. return head;
  41. }
  42. Node reversedHead = reverse(head.getNextNode());
  43. head.getNextNode().setNextNode(head);
  44. head.setNextNode(null);
  45. return reversedHead;
  46. }
  47.  
  48. /**
  49. * 遍历,将当前节点的下一个节点缓存后更改当前节点指针
  50. *
  51. */
  52. public static Node reverse2(Node head) {
  53. if (null == head) {
  54. return head;
  55. }
  56. Node pre = head;
  57. Node cur = head.getNextNode();
  58. Node next;
  59. while (null != cur) {
  60. next = cur.getNextNode();
  61. cur.setNextNode(pre);
  62. pre = cur;
  63. cur = next;
  64. }
  65. //将原链表的头节点的下一个节点置为null,再将反转后的头节点赋给head
  66. head.setNextNode(null);
  67. head = pre;
  68.  
  69. return head;
  70. }
  71.  
  72. public static void main(String[] args) {
  73. Node head = new Node(0);
  74. Node tmp = null;
  75. Node cur = null;
  76. // 构造一个长度为10的链表,保存头节点对象head
  77. for (int i = 1; i < 10; i++) {
  78. tmp = new Node(i);
  79. if (1 == i) {
  80. head.setNextNode(tmp);
  81. } else {
  82. cur.setNextNode(tmp);
  83. }
  84. cur = tmp;
  85. }
  86. //打印反转前的链表
  87. Node h = head;
  88. while (null != h) {
  89. System.out.print(h.getRecord() + " ");
  90. h = h.getNextNode();
  91. }
  92. //调用反转方法
  93. head = reverse2(head);
  94. System.out.println("\n**************************");
  95. //打印反转后的结果
  96. while (null != head) {
  97. System.out.print(head.getRecord() + " ");
  98. head = head.getNextNode();
  99. }
  100. }
  101. }

Java反转单链表(code)的更多相关文章

  1. Java反转单链表

    class Node { private int data; private Node nextNode; public Node(int data) { this.data = data; } pu ...

  2. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  3. Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现

    Reverse反转算法 #include <iostream> using namespace std; //交换的函数 void replaced(int &a,int & ...

  4. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

  5. 在O(n) 时间复杂度,O(1)空间复杂度内反转单链表

    在LeetCode中看到判断回文的程序:https://leetcode.com/problems/palindrome-linked-list/ 里面用单链表来存储数据,先反转前半部分的单链表,然后 ...

  6. 以K个为一组反转单链表,最后不足K个节点的部分也反转

    package StackMin.ReverseList_offer16; public class ReverseKgroup_extend_offer16 { /** * 分组反转单链表,最后不足 ...

  7. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

  8. JAVA数据结构——单链表

    链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...

  9. 使用java实现单链表(转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html)

    使用java实现单链表----(java中的引用就是指针)转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html ? 1 2 3 4 5 6 7 ...

随机推荐

  1. DB2 递归查询

    上一篇中讲解了ORACLE中的递归查询,下面我们看一下DB2中如何使用递归查询: 同样的我们先新建一个表来存储以上信息,并插入测试数据: --建表 create table FAMILY ( pers ...

  2. Maven仓库Nexus的安装配置

    1.下载nexus,最新版本是nexus-2.8.0-05   参考文章 下载nexus-latest-bundle.zip文件后,并解压到  D:\nexus下 配置nexus的环境变量:先配置NE ...

  3. [iOS 多线程 & 网络 - 2.11] - ASI框架上传文件

    A.ASI的上传功能基本使用 1.实现步骤 (1)创建请求 使用ASIFormDataRequest (2)设置上传文件路径 (3)发送请求     2.上传相册相片 UIImagePickerCon ...

  4. Session,Cookie 和local storage的区别

    以前从没有听说过local storage, 在网上查了一些资料,得到如下结论 从存储位置看,分为服务器端存储和客户端存储两种 服务器端: session 浏览器端: cookie, localSto ...

  5. java commons-lang 工具包 逃脱工具 转unicode 及其他

    <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</ar ...

  6. JavaScript随笔记(一)基础概念以及变量类型

    一.JavaScript中的基础概念 1.defer属性 一般我们在引用外部js文件的时候往往是将引用文件的位置放在标签当中,比如那么在标签中引入多个js文件时,浏览器会按照引入顺序加载执行这些引入的 ...

  7. Visifire的一些使用心得

    1.如何让图表的Y轴不从0开始显示:有时一系列的数据差别很小,如果从0开始显示,在Y轴上,会一堆数据都堆在某一个区间.例如期货的蜡烛图.将ViewportRangeEnabled设为true即可解决此 ...

  8. Cocos2d-x——Cocos2d-x 屏幕适配新解 – 兼容与扩展【转载】

    Cocos2d-x 屏幕适配新解 – 兼容与扩展 本文出自[无间落叶](转载请保留出处):http://blog.leafsoar.com/archives/2013/05-13-08.html 在读 ...

  9. 一种基于Welch's t检验的二元关系挖掘

    现实中常常需要挖掘两种因素之间的关联,Welch's t检验很适合其中的nomial-numerical的关系挖掘.比如天气状况对销量的影响,或者天气情况对交通流量的影响等等.我们可以按照下雨/不下雨 ...

  10. Codeforces Gym 100342E Problem E. Minima 暴力

    Problem E. MinimaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attac ...