Java反转链表测试过程介绍

作者:ziop-三月 时间:2022-10-02 20:10:03 

导读

本文主体为单项链表和双向链表的反转以及简单的测试,以便于理解链表相关的算法题目。

链表

特点

  • 便于增删数据,不便于寻址

  • 在内存中属于跳转结构

单链表和双链表的定义

单链表: 值,一条next指针

双链表:值,一条last指针,一条next指针

单向链表

Node结点

public static class Node {
   public int value;
   public Node next;
   public Node(int value) {
       this.value = value;
   }
   @Override
   public String toString() {
       ArrayList<Integer> nums = new ArrayList<>();
       Node node = this;
       while (node != null) {
           nums.add(node.value);
           node = node.next;
       }
       return nums.toString();
   }
}

反转单向链表

public static Node reverseLinkedList(Node head) {
   Node next = null;
   Node pre = null;
   while (head != null) {
       next = head.next;
       head.next = pre;
       pre = head;
       head = next;
   }
   return pre;
}

测试函数

public static void main(String[] args) {
   Node node = new Node(1);
   node.next = new Node(2);
   node.next.next = new Node(3);
   node = reverseLinkedList(node);
   System.out.println(node);
}

输出结果如下:

[3, 2, 1]

双向链表

Node结点

public static class DoubleList {
   public int value;
   public DoubleList next;
   public DoubleList last;
   public DoubleList(int value) {
       this.value = value;
   }
   @Override
   public String toString() {
       ArrayList<Integer> nums = new ArrayList<>();
       DoubleList node = this;
       while (node != null) {
           nums.add(node.value);
           node = node.next;
       }
       return nums.toString();
   }
}

反转双向链表

public static DoubleList reverseDoubleList(DoubleList head) {
   DoubleList next;
   DoubleList pre = null;
   while (head != null) {
       next = head.next;
       head.next = pre;
       // 注意和单项链表不一样的地方只有这一行,其他都基本一样
       head.last = next;
       pre = head;
       head = next;
   }
   return pre;
}

测试代码

public static void main(String[] args) {
   DoubleList node1 = new DoubleList(1);
   node1.next = new DoubleList(2);
   node1.next.last = node1;
   node1.next.next = new DoubleList(3);
   node1.next.next.last = node1.next;
   System.out.println("reverseDoubleList(node1) = " + reverseDoubleList(node1));
}

输出结果如下:

reverseDoubleList(node1) = [3, 2, 1]

来源:https://blog.csdn.net/weixin_46178937/article/details/127930618

标签:Java,反转链表,测试
0
投稿

猜你喜欢

  • JavaMail实现邮件发送的方法

    2023-08-18 06:37:38
  • java对象初始化代码详解

    2023-09-19 13:59:01
  • Swagger及knife4j的基本使用详解

    2023-02-13 09:34:00
  • java 中 System.out.println()和System.out.write()的区别

    2021-09-17 04:30:52
  • Java远程连接Linux服务器并执行命令及上传文件功能

    2023-01-28 14:03:31
  • 使用Maven搭建Hadoop开发环境

    2021-09-11 07:55:45
  • Java实现简单猜数字小游戏

    2023-11-28 08:10:07
  • java写的伪微信红包功能示例代码

    2023-07-05 00:24:23
  • Java排序的那些事之sort方法的使用详解

    2023-01-22 00:18:35
  • maven中配置项目的jdk版本无效的排查方式

    2023-07-18 21:43:42
  • 使用Java实现qq邮箱发送邮件

    2023-10-14 18:24:36
  • SQLServer批量插入数据的三种方式及性能对比

    2022-07-01 12:05:07
  • 简单了解Spring中BeanFactory与FactoryBean的区别

    2022-01-14 03:59:20
  • Java文件操作工具类fileUtil实例【文件增删改,复制等】

    2023-11-28 08:39:00
  • Spring MVC的优点与核心接口_动力节点Java学院整理

    2023-11-28 05:43:36
  • SpringBoot2之PUT请求接收不了参数的解决方案

    2023-08-23 01:32:07
  • Spring JPA联表查询之注解属性详解

    2021-11-04 14:19:04
  • java并发编程专题(六)----浅析(JUC)Semaphore

    2023-07-27 23:30:28
  • 教你如何编写简单的网络爬虫

    2023-06-01 08:58:30
  • Android ContentProvider实现获取手机联系人功能

    2023-08-07 00:52:27
  • asp之家 软件编程 m.aspxhome.com