单链表的增删改查的实现

mac2025-06-12  30

package dataStructures.list; public class MySingleNode { private int element; private MySingleNode nextNode; public MySingleNode(int element) { this.element=element; this.nextNode=null; } /** * 在结点最后一个后面加新结点 * @param node 新结点 * @return 返回当前结点 */ public MySingleNode insertLast(MySingleNode node) { MySingleNode currentNode=this; while (currentNode.nextNode!=null) { currentNode=currentNode.nextNode; } return currentNode.nextNode=node; } /** * 在指定的结点后面加入新结点 * @param element 指定结点元素 * @param node 新结点 */ public void insert(int element,MySingleNode node) { MySingleNode currentNode=this; while (currentNode!=null) { if (currentNode.element==element) { //(特别注意)每次需要新创建对象,不然对象会被覆盖 node=new MySingleNode(node.element); //保存原结点的下一个结点索引 MySingleNode nextSingleNode=currentNode.nextNode; //新结点的下一个结点执行原结点的下一个结点 node.nextNode=nextSingleNode; //当前结点的下一个结点指向新结点 currentNode.nextNode=node; } //当前结点指向下一个结点 currentNode=currentNode.nextNode; } } /** * 更新对应元素结点的元素 * @param element 目标元素 * @param newElement 更新元素 */ public void update(int element,int newElement) { MySingleNode currentNode=this; while(currentNode!=null) { if(currentNode.element==element) { currentNode.element=newElement; } currentNode=currentNode.nextNode; } } /** * 删除目标元素的结点,通过当前结点的下一个结点的元素匹配来做到删除效果 * 无法删除第一个结点 * @param element */ public void remove(int element) { MySingleNode currentNode=this; while (currentNode!=null) { if(currentNode.nextNode!=null) { if(currentNode.nextNode.element==element){ currentNode.nextNode=currentNode.nextNode.nextNode; } } currentNode=currentNode.nextNode; } } /** * 遍历展示所有结点的元素 */ public void show() { MySingleNode currentNode=this; while (currentNode!=null) { System.out.print(currentNode.element+" "); currentNode=currentNode.nextNode; } System.out.println(); } public static void main(String[] args) { MySingleNode node1=new MySingleNode(1); MySingleNode node2=new MySingleNode(2); MySingleNode node5=new MySingleNode(2); MySingleNode node3=new MySingleNode(3); MySingleNode node4=new MySingleNode(4); //在链表末尾添加数据 node1.insertLast(node2).insertLast(node3).insertLast(node5); //System.out.println(node1.nextNode.nextNode.element); //展示整个链表信息 node1.show(); //在元素为3的位置后面新增一个结点 node1.insert(3, node4); node1.show(); //更新结点的元素为4的结点元素为9 node1.update(4, 9); node1.show(); //删除元素为9的结点 node1.remove(9); node1.show(); } }
最新回复(0)