package dataStructures.list;
public class MySingleCircularNode {
//当前元素
private int element;
//当前结点的下一个结点
private MySingleCircularNode nextNode;
//开始结点
private MySingleCircularNode beginNode=this;
public MySingleCircularNode(int element) {
this.element=element;
this.nextNode=this;//循环链表下一个结点指向自己
}
/**
* 在指定的结点后面加入新结点
* @param element 指定结点元素
* @param node 新结点
*/
public void insert(int element,MySingleCircularNode node) {
MySingleCircularNode currentNode=this;
while (currentNode!=null) {
if (currentNode.element==element) {
//(特别注意)每次需要新创建对象,不然对象会被覆盖
node=new MySingleCircularNode(node.element);
//保存原结点的下一个结点索引
MySingleCircularNode nextSingleNode=currentNode.nextNode;
//新结点的下一个结点执行原结点的下一个结点
node.nextNode=nextSingleNode;
//当前结点的下一个结点指向新结点
currentNode.nextNode=node;
}
//当前结点指向下一个结点
currentNode=currentNode.nextNode;
if(beginNode.equals(currentNode)) {
break;
}
}
}
/**
* 更新对应元素结点的元素
* @param element 目标元素
* @param newElement 更新元素
*/
public void update(int element,int newElement) {
MySingleCircularNode currentNode=this;
while(currentNode!=null) {
if(currentNode.element==element) {
currentNode.element=newElement;
}
currentNode=currentNode.nextNode;
if(beginNode.equals(currentNode)) {
break;
}
}
}
/**
* 删除目标元素的结点,通过当前结点的下一个结点的元素匹配来做到删除效果
* 无法删除第一个结点
* @param element
*/
public void remove(int element) {
MySingleCircularNode currentNode=this;
while (currentNode!=null) {
if(currentNode.nextNode!=null) {
if(currentNode.nextNode.element==element){
currentNode.nextNode=currentNode.nextNode.nextNode;
}
}
currentNode=currentNode.nextNode;
if(beginNode.equals(currentNode)) {
break;
}
}
}
/**
* 遍历展示所有结点的元素
*/
public void show() {
MySingleCircularNode currentNode=this;
while (currentNode!=null) {
System.out.print(currentNode.element+" ");
currentNode=currentNode.nextNode;
if(beginNode.equals(currentNode)) {
break;
}
}
System.out.println();
}
public static void main(String[] args) {
MySingleCircularNode node1=new MySingleCircularNode(1);
MySingleCircularNode node2=new MySingleCircularNode(2);
MySingleCircularNode node5=new MySingleCircularNode(2);
MySingleCircularNode node3=new MySingleCircularNode(3);
MySingleCircularNode node4=new MySingleCircularNode(4);
//在链表末尾添加数据
//node1.insertLast(node2).insertLast(node3).insertLast(node5);
//System.out.println(node1.nextNode.nextNode.element);
//展示整个链表信息
node1.show();
//在元素为3的位置后面新增一个结点
node1.insert(1, node2);
node1.insert(2, node3);
node1.insert(3, node4);
node1.insert(4, node5);
node1.show();
//更新结点的元素为4的结点元素为9
node1.update(4, 9);
node1.show();
//删除元素为9的结点
node1.remove(9);
node1.show();
}
}
单向循环链表的增删改查的实现
最新推荐文章于 2023-04-03 09:00:14 发布