单向链表的增删改(Java)
链表节点的组成有数据元素(data域)和下一个节点的存储位置(next域)
pubulic class Node{
public int data;//数据元素
public test next;//指向下一个节点
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public test getNext() {
return next;
}
public void setNext(test next) {
this.next = next;
}
//构造方法
public Node(int data){
this.data=data;
}
}
添加节点(按顺序)
思路:
- 首先找到新添加的节点的位置, 是通过辅助变量(为要添加节点的前一个节点), 通过遍历来搞定
- 新的节点.next = temp.next
- 将temp.next = 新的节点
public void add2(Node node){
//定义一个头结点,内部为空
private HeroNode head=new HeroNode(0,"");
Node temp=head;//辅助变量,头结点不能动
boolean flag=false;//判断是否可以添加
while (true){
if(temp.next == null)//已经遍历到链表最后
break;
else if(temp.next.data>node.data){//找到位置
break;
}else if(temp.next.data==node.data) {//不能添加,有重复
flag=true;
break;
}
temp=temp.next;
}
//循环结束时,temp位置为插入节点的前一个节点
if(flag){
System.out.println("有重复节点,不能添加");
}else {
node.next=temp.next;//将新节点和下一位节点连接起来
temp.next=node;//将新节点和上一位节点连接起来
}
}
修改节点
思路:
1.遍历找到要修改的节点的位置
2.修改节点
public void update(Node newNode){
//链表为空
if (head.next==null)
return;
Node temp=head.next;
boolean flag=false;//判断是否找到该节点
while (true){
if (temp==null)//遍历完没有找到
{break;}
else if(temp.data==newNode.data) {
flag=true;//找到了
break;
}
temp=temp.next;
}
if (flag){
temp.name=newNode.name;//data不能修改,修改里面的内容,类中没写
}else {
System.out.println("没有该节点");
}
}
删除节点
思路:
1.遍历链表,找到该节点,定义辅助变量(temp)为该节点的上一个节点
2.使该节点的上一个节点指向该节点的下一个节点,
即temp.next = temp.next.next
注意:被删除的节点将不会有其他引用指向,会被垃圾回收机制回收
public void delete(int id){
//链表为空
if (head.next==null)
return;
Node temp=head;
boolean flag=false;//判断是否找到该节点
while (true){
if (temp.next==null)//遍历完
{break;}
else if(temp.next.data==id) {
flag=true;//找到了
break;
}
temp=temp.next;
}
if (flag){
temp.next=temp.next.next;//将该节点的上一个节点直接连接下一个节点
}else {
System.out.println("没有该节点");
}
}
输出链表
//显示链表
public void list(){
Node temp=head.next;
if(temp==null){
System.out.println("链表为空!!!");
return;
}
while (true){
if (temp == null)
break;
System.out.println(temp);
temp=temp.next;
}
}