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();
}
}
单链表的增删改查的实现
最新推荐文章于 2022-06-26 17:56:40 发布