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,反转链表,测试
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
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
![](https://img.aspxhome.com/file/2023/2/59052_0s.jpg)
java写的伪微信红包功能示例代码
2023-07-05 00:24:23
Java排序的那些事之sort方法的使用详解
2023-01-22 00:18:35
![](https://img.aspxhome.com/file/2023/4/61014_0s.png)
maven中配置项目的jdk版本无效的排查方式
2023-07-18 21:43:42
![](https://img.aspxhome.com/file/2023/9/57509_0s.png)
使用Java实现qq邮箱发送邮件
2023-10-14 18:24:36
![](https://img.aspxhome.com/file/2023/1/58561_0s.jpg)
SQLServer批量插入数据的三种方式及性能对比
2022-07-01 12:05:07
![](https://img.aspxhome.com/file/2023/7/71077_0s.jpg)
简单了解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
![](https://img.aspxhome.com/file/2023/9/60529_0s.jpg)
SpringBoot2之PUT请求接收不了参数的解决方案
2023-08-23 01:32:07
![](https://img.aspxhome.com/file/2023/2/58202_0s.png)
Spring JPA联表查询之注解属性详解
2021-11-04 14:19:04
![](https://img.aspxhome.com/file/2023/9/67599_0s.jpg)
java并发编程专题(六)----浅析(JUC)Semaphore
2023-07-27 23:30:28
教你如何编写简单的网络爬虫
2023-06-01 08:58:30
Android ContentProvider实现获取手机联系人功能
2023-08-07 00:52:27