java实现双链表

java实现双链表

双链表也可以分为普通双链表和循环双链表。双链表指的是一个结点除了包括结点内容之外,还包括此节点的前一结点信息和后一结点的结点信息。
看到一篇博客解释的不错,包含链表的图解释等,此处引用一下。
在这里插入图片描述
链接信息为:链表示意图

Java实现循环双向链表

思路为对于每个结点都要设置一个前一结点和后一节点,并且初始化为本身(单个结点),然后增加结点。代码实现注释很详细不在一一论述。实现比较简单,只是学习。

package 线性结构;

public class DoubleNode {
	//上一个结点
	DoubleNode pre = this;
	//下一个结点
	DoubleNode next = this;
	//结点数据
	int data;
	public DoubleNode(int data) {
		this.data = data;
	}
	//增结点
	public void after(DoubleNode node) {
		//原来的下一个结点
		DoubleNode nextNext = next;
		//新结点作为当前结点的下一个结点
		this.next = node;
		//当前结点做新结点的前一个结点
		node.pre = this;
		//让原来的下一结点作为新结点的下一个结点
		node.next = nextNext;
		//让原来的下一个结点的上一个结点为新结点
		nextNext.pre = node;
	}
	public DoubleNode next() {
		return this.next;
	}
	public DoubleNode pre() {
		return this.pre;
	}
	//获取数据
	public int getData() {
		return this.data;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建结点
		DoubleNode n1 = new DoubleNode(1);
		DoubleNode n2 = new DoubleNode(2);
		DoubleNode n3 = new DoubleNode(3);
		//追加结点
		n1.after(n2);
		n2.after(n3);
		System.out.println(n2.pre().getData());
		System.out.println(n2.getData());
		System.out.println(n2.next().getData());
		System.out.println(n3.next().getData());
		System.out.println(n1.pre().getData());
		
	}

}

运行结果

在这里插入图片描述

Java可以通过定义一个双链表类来实现双向链表。下面是一个示例的Java代码来实现一个双链表: ```java package DoubleLinkedListTwo; //定义一个节点类 class ListNode { int val; ListNode prev; ListNode next; public ListNode(int val) { this.val = val; } } //定义双链表类 public class DoubleLinkedList { private ListNode head; //头节点 //在链表末尾添加一个节点 public void addLast(int val) { ListNode newNode = new ListNode(val); if (head == null) { head = newNode; } else { ListNode cur = head; while (cur.next != null) { cur = cur.next; } cur.next = newNode; newNode.prev = cur; } } //打印双链表 public void display() { ListNode cur = head; while (cur != null) { System.out.print(cur.val + " "); cur = cur.next; } System.out.println(); } //清空链表 public void clear() { head = null; } } //测试双链表 public class TestDoubleLinkedList { public static void main(String[] args) { //创建一个双链表 DoubleLinkedList d = new DoubleLinkedList(); //在链表末尾添加元素 d.addLast(1); d.addLast(1); d.addLast(1); d.addLast(1); //打印链表 d.display(); //清空链表 d.clear(); d.display(); } } ``` 以上代码示例演示了如何使用Java代码实现一个双向链表,并在双链表添加元素,并打印链表。你可以根据自己的需求进一步扩展这个双链表类,并在测试类添加其他操作,如在指定位置插入元素、删除元素等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java 实现 双向链表](https://blog.csdn.net/m0_52066789/article/details/122342307)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Changcc_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值