Java实现单链表翻转实例代码

 更新时间:2017年03月24日 14:01:08   作者:Michael_YuChen  
Java实现单链表反转,递归和非递归两种形式。接下来通过本文给大家分享Java实现单链表翻转实例代码,需要的的朋友参考下

Java实现单链表反转,递归和非递归两种形式

/**
 * 反转单链表
 */

/** * 定义链表
 * 
 * @author 16026
 *
 */
class Node {
  int val;
  Node next;
  public Node(int val) {
    this.val = val;
  }
}
public class ReverseList {
  /**
   * 反转链表
   * 
   * @param head
   * @return
   */
  public static Node reverseList(Node head) {
    if (head == null || head.next == null) {
      return head;
    }
    Node reHead = null;// 定义新链表头结点
    while (head != null) {
      Node cur = head.next;// 记录下一个节点
      head.next = reHead;// 将rehead节点连接到head节点上
      reHead = head;// 让rehead指向head
      head = cur;// 将head指向下一个节点
    }
    return reHead;
  }
  /**
   * 递归反转链表
   * 
   * @param head
   * @return
   */
  public static Node reverseList2(Node head) {
    if (head == null || head.next == null)
      return head;
    Node rehead = reverseList2(head.next);
    head.next.next = head;// 将头节点置于末端
    head.next = null;// 防止链表循环
    return rehead;
  }
  /**
   * 打印链表
   * 
   * @param head
   */
  public static void printList(Node head) {
    if (head == null)
      return;
    while (head != null) {
      System.out.print(head.val + " ");
      head = head.next;
    }
  }
  /**
   * 测试
   * 
   * @param args
   */
  public static void main(String[] args) {
    Node n1 = new Node(1);
    Node n2 = new Node(2);
    Node n3 = new Node(3);
    Node n4 = new Node(4);
    Node n5 = new Node(5);
    n1.next = n2;
    n2.next = n3;
    n3.next = n4;
    n4.next = n5;
    // Node rehead = reverseList(n1);
    Node rehead = reverseList2(n1);
    printList(rehead);
  }
}

运行结果如下:

以上所述是小编给大家介绍的Java实现单链表翻转实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java中将List拆分为多个小list集合的实现代码

    Java中将List拆分为多个小list集合的实现代码

    这篇文章主要介绍了Java中如何将List拆分为多个小list集合,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java 替换字符串右侧出现的第一个子串方式

    Java 替换字符串右侧出现的第一个子串方式

    这篇文章主要介绍了Java 替换字符串右侧出现的第一个子串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Spring Cloud Feign接口返回流的实现

    Spring Cloud Feign接口返回流的实现

    这篇文章主要介绍了Spring Cloud Feign接口返回流的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 在Java中轻松使用工厂设计模式介绍

    在Java中轻松使用工厂设计模式介绍

    这篇文章主要介绍了在Java中轻松使用工厂设计模式介绍,工厂设计模式或工厂方法设计模式是一种广泛使用且易于理解的设计模式,文章通过围绕主题展开详细的内容介绍,感兴趣的朋友可以参考一下
    2022-09-09
  • SpringBoot整合邮件发送的四种方法

    SpringBoot整合邮件发送的四种方法

    这篇文章主要介绍了SpringBoot整合邮件发送的四种方法,SpringBoot中集成了发送邮件的功能,本文做了进一步优化,需要的朋友可以参考下
    2023-03-03
  • SpringBoot统一返回JSON格式实现方法详解

    SpringBoot统一返回JSON格式实现方法详解

    这篇文章主要介绍了SpringBoot统一返回JSON格式实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • mybatis拦截器实现数据库数据权限隔离方式

    mybatis拦截器实现数据库数据权限隔离方式

    通过Mybatis拦截器,在执行SQL前添加条件实现数据权限隔离,特别是对于存在用户ID区分的表,拦截器会自动添加如user_id=#{userId}的条件,确保SQL在执行时只能操作指定用户的数据,此方法主要应用于Mybatis的四个阶段
    2024-11-11
  • SpringBoot获取yml和properties配置文件的内容

    SpringBoot获取yml和properties配置文件的内容

    这篇文章主要为大家详细介绍了SpringBoot获取yml和properties配置文件的内容,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • java发送url请求获取返回值的二种方法

    java发送url请求获取返回值的二种方法

    这篇文章主要介绍了java发送url请求获取返回值的二种方法,需要的朋友可以参考下
    2014-03-03
  • Java多线程4种拒绝策略小结

    Java多线程4种拒绝策略小结

    当线程池中的任务队列已满且无法再接受新的任务时,就需要采取拒绝策略来处理这种情况,本文主要介绍了Java多线程拒绝策略,包含了四种常见的拒绝策略,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论