java 实现单链表逆转详解及实例代码

 更新时间:2017年02月28日 09:07:13   作者:lean1252  
这篇文章主要介绍了java 实现单链表逆转实例代码的相关资料,需要的朋友可以参考下

java 实现单链表逆转详解

实例代码:

class Node { 
  Node next; 
  String name; 
  public Node(String name) { 
    this.name = name; 
  } 
 
  /** 
   * 打印结点 
   */ 
  public void show() { 
    Node temp = this; 
    do { 
      System.out.print(temp + "->"); 
      temp = temp.next; 
    }while(temp != null); 
    System.out.println(); 
  } 
 
  /** 
   * 递归实现单链表反转,注意:单链表过长,会出现StackOverflowError 
   * @param n 
   * @return 
   */ 
  public static Node recursionReverse(Node n) { 
    long start = System.currentTimeMillis(); 
    if(n == null || n.next == null) { 
      return n; 
    } 
    Node reverseNode = recursionReverse(n.next); 
 
    n.next.next = n; 
    n.next = null; 
    System.out.println("递归逆置耗时:" + (System.currentTimeMillis() - start) + "ms..."); 
    return reverseNode; 
  } 
 
  /** 
   * 循环实现单链表反转 
   * @param n 
   * @return 
   */ 
  public static Node loopReverse(Node n) { 
    long start = System.currentTimeMillis(); 
    if(n == null || n.next == null) { 
      return n; 
    } 
 
    Node pre = n; 
    Node cur = n.next; 
    Node next = null; 
    while(cur != null) { 
      next = cur.next; 
      cur.next = pre; 
      pre = cur; 
      cur = next; 
    } 
    n.next = null; 
    n = pre; 
    System.out.println("循环逆置耗时:" + (System.currentTimeMillis() - start) + "ms..."); 
    return pre; 
  } 
 
  @Override 
  public String toString() { 
    return name; 
  } 
   
  public static void main(String[] args) { 
 
    int len = 10; 
    Node[] nodes = new Node[len]; 
    for(int i = 0; i < len; i++) { 
      nodes[i] = new Node(i + ""); 
    } 
    for(int i = 0; i < len - 1; i++) { 
      nodes[i].next = nodes[i+1]; 
    } 
    /* try { 
      Thread.sleep(120000); 
    } catch (InterruptedException e) { 
      e.printStackTrace(); 
    }*/ 
    Node r1 = Node.loopReverse(nodes[0]); 
    r1.show(); 
    Node r = Node.recursionReverse(r1); 
    r.show(); 
 
  }  
} 

总结

对于递归和循环,推荐使用循环实现,递归在单链表过大时,会出现StatckOverflowError,递归涉及到方法的调用,在性能上也弱于循环的实现

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • SpringBoot 整合jdbc和mybatis的方法

    SpringBoot 整合jdbc和mybatis的方法

    该文章主要为记录如何在SpringBoot项目中整合JDBC和MyBatis,在整合中我会使用简单的用法和测试用例,感兴趣的朋友跟随小编一起看看吧
    2019-11-11
  • MyBatis 中使用 Mapper 简化代码的方法

    MyBatis 中使用 Mapper 简化代码的方法

    这篇文章主要介绍了MyBatis 中使用 Mapper 简化代码的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Springboot文件上传出现找不到指定系统路径的解决

    Springboot文件上传出现找不到指定系统路径的解决

    这篇文章主要介绍了Springboot文件上传出现找不到指定系统路径的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • JAVA错误类结果类和分页结果类代码详解

    JAVA错误类结果类和分页结果类代码详解

    这篇文章主要介绍了JAVA错误类结果类和分页结果类代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • springBoot解决static和@Component遇到的bug

    springBoot解决static和@Component遇到的bug

    这篇文章主要介绍了springBoot解决static和@Component遇到的bug,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 深度剖析Java中的内存原型及工作原理

    深度剖析Java中的内存原型及工作原理

    这篇文章主要介绍了深度剖析Java中的内存原型及工作原理,本文讲解了java虚拟机内存原型、常量池、Java内存分配中的栈、Java内存分配中的堆等内容,需要的朋友可以参考下
    2015-01-01
  • Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】

    Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】

    这篇文章主要介绍了Java实现的微信图片处理工具类,可实现针对图片的裁剪、合并、等比例缩放、旋转、识别等各种常见的图片处理功能,需要的朋友可以参考下
    2017-11-11
  • JAVA正则表达式过滤文件的实现方法

    JAVA正则表达式过滤文件的实现方法

    这篇文章主要介绍了JAVA正则表达式过滤文件的实现方法的相关资料,希望通过本文大家能够掌握理解这部分内容,需要的朋友可以参考下
    2017-09-09
  • Spring Security十分钟入门教程

    Spring Security十分钟入门教程

    这篇文章主要介绍了Spring Security入门教程,Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架
    2022-09-09
  • httpclient模拟post请求json封装表单数据的实现方法

    httpclient模拟post请求json封装表单数据的实现方法

    下面小编就为大家带来一篇httpclient模拟post请求json封装表单数据的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论