单向循环链表的增删改查的实现

mac2025-07-15  2

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(); } }
最新回复(0)