手把手教你用java语言实现数据结构(三)-----------双向循环链表

537 阅读2分钟

我们先来谈谈循环链表,其实循环链表是基于单项链表实现的,让当前节点的next指向自己,即可实现循环链表

LoopNode  next = this;

单向循环链表

1、循环链表

示例代码:

public class LoopNode {
	//节点内容
	int data;
	//下一个节点
	LoopNode next = this;
	public LoopNode(int data) {
		this.data = data;
	}
	
	//指定位置处插入节点
		public void insertNode(LoopNode node) {
			//取出下一个节点,作为下下一个节点
			LoopNode nextnext = this.next;
			//让要插入的节点为当前节点的next
			this.next = node;
			//让下下一个节点为插入节点的next
			node.next = nextnext;
		}
		
	//删除节点操作
	public void delNode() {
		//获取下下一个节点
		 LoopNode newNode = this.next.next;
		//将下下一个节点设置为当前节点的下一个节点
		 this.next = newNode;
	}
	//获取下一个节点
	public LoopNode next() {
		return this.next;
	}
	//获取节点的数据
	public int getData() {
		return this.data;
	}
}

2.双向循环链表(LinkArrayList底层原理)

1、定义节点及节点数据

    //上一个节点
	DoubleNode pro = this;
	//下一个节点
	DoubleNode next = this;
	//节点数据
	int data;
	public DoubleNode(int data) {
		this.data = data;
	}

2、添加节点

    //增加节点
	public void insertNode(DoubleNode node) {
		//将原来节点的下一个节点当作下下一个节点
		DoubleNode nextnext = this.next;
		//将要插入的节点当作前一个节点的下一个节点
		this.next = node;
		//把当前节点作为新节点的前一个节点
		node.pro = this; 
		//将下下一个节点当作新插入节点的next
		node.next = nextnext;
		//让下下一个节点的上一个节点为新节点
		node = nextnext.pro;
	}

3、获取节点及数据

        //下一个节点
	public DoubleNode next() {
		return this.next;
	}
	//上一个节点
		public DoubleNode pro() {
			return this.pro;
		}
	//获取数据
		public int getData() {
			return this.data;
		}

完整代码

package com.yueqian.shujujiegou;
/**
 * 数据结构------双向循环链表
 * @author LinChi
 *
 */
public class DoubleNode {
	//上一个节点
	DoubleNode pro = this;
	//下一个节点
	DoubleNode next = this;
	//节点数据
	int data;
	public DoubleNode(int data) {
		this.data = data;
	}
	//增加节点
	public void insertNode(DoubleNode node) {
		//将原来节点的下一个节点当作下下一个节点
		DoubleNode nextnext = this.next;
		//将要插入的节点当作前一个节点的下一个节点
		this.next = node;
		//把当前节点作为新节点的前一个节点
		node.pro = this; 
		//将下下一个节点当作新插入节点的next
		node.next = nextnext;
		//让下下一个节点的上一个节点为新节点
		node = nextnext.pro;
	}

	//下一个节点
	public DoubleNode next() {
		return this.next;
	}
	//上一个节点
		public DoubleNode pro() {
			return this.pro;
		}
	//获取数据
		public int getData() {
			return this.data;
		}
}

双向循环链表就介绍这么多了,对链表操作还不太熟练的小可爱们,可以看看我的这篇博客:

记得点赞+关注👉:手把手教你用java语言实现数据结构(二)-----------单向链表