Java反转链表测试过程介绍
作者:ziop-三月 发布时间:2022-10-02 20:10:03
标签:Java,反转链表,测试
导读
本文主体为单项链表和双向链表的反转以及简单的测试,以便于理解链表相关的算法题目。
链表
特点
便于增删数据,不便于寻址
在内存中属于跳转结构
单链表和双链表的定义
单链表: 值,一条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


猜你喜欢
- MapperScan添加动态配置(占位符)在对Mybatis自动扫描配置中,使用注解配置时,@MapperScan中的配置,通常配置如下:@
- 以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的
- 一、Application是什么?Application类在每一次开发当中是我们都会遇到的,每一个APP都会有一个Application实例
- 示例 1 :使用搜索表单创建全屏模式我们要构建的小应用程序有一个应用程序栏,右侧有一个搜索按钮。按下此按钮时,将出现一个全屏模式对话框。它不
- 本文实例为大家分享了Android点击缩略图放大效果的具体代码,供大家参考,具体内容如下import android.animation.A
- 本文实例讲述了Java包装类原理与用法。分享给大家供大家参考,具体如下:产生:为了提高数据类型的的面向对象性,所以产生了包装类,包装类中有各
- 本文接着上一篇,继续为大家分享了JavaWeb实现学生信息管理系统的第二篇,供大家参考,具体内容如下今日任务:实现学生管理系统的查找和添加功
- 这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时
- 视频演示:springboot+vue音乐网站摘要网络技术以及计算机的发展,网友们对网络的要求也日益长高,平常在网上听话用一大堆下载软件下载
- 本文实例为大家分享了java GUI学生图书管理的具体代码,供大家参考,具体内容如下- mysql数据库建表:1.book表 2.bs借书记
- 以往都是使用反射调用实例方法,那么反射如何调用静态方法呢?看下面的例子Class<?> threadClazz = Class.
- 需求在配置类中,从application.properties中读取一个复杂list。如List<Person>或者初始化一个m
- WPF 实现调用 ffmpeg 实现屏幕录制框架使用.NET4Visual Studio 2022需要去 ffmpeg[2]&nb
- 1:Group的功能Group可以管理一组节点Group可以对管理的节点进行增删改查的操作Group可以管理节点的属性1.2:看看JDKSE
- 效果图如下所示:代码:<LinearLayout android:orientation="horizontal
- springboot整合vue实现上传下载文件,供大家参考,具体内容如下环境springboot 1.5.x完整代码下载:springboo
- 问题(1)重入锁是什么?(2)ReentrantLock如何实现重入锁?(3)ReentrantLock为什么默认是非公平模式?(4)Ree
- 基本要点1、Lombok作用:在我们的实体类中,我们再也不需要声明get、set、有参无参等方法,统统可以通过Lombok注解来实现同样的功
- 本文实例讲述了C#将布尔类型转换成字节数组的方法。分享给大家供大家参考。具体如下:byte[] b = null;b = BitConver