链表分为带头节点与不带头节点的
1、head节点
(1)不存放具体的数据
(2)表示单链表头
单链表带头节点的增删查改
public class SingleLinkedList {
//头节点不要动
private HeroNode head=new HeroNode(0,null,null);
//添加节点到单向链表
//不考虑编号顺序时
public void addHero(HeroNode heroNode){
//因为head节点不能动,因此我们需要一个辅助遍历temp;
HeroNode temp=head;
//遍历链表,找到最后
while(true){
if(temp.next==null){
break;
}
temp=temp.next;
}
//将最后这个节点的next指向链表的最后
temp.next=heroNode;
}
public void addHeroOrder(HeroNode heroNode){
HeroNode temp=head;
boolean flag=false;
while(true){
if(temp.next==null){
break;
}
if(temp.next.no>heroNode.no){
break;
}
if(temp.next.no==heroNode.no){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
System.out.println("该编号已存在");
}else{
heroNode.next=temp.next;
temp.next=heroNode;
}
}
public void update(HeroNode newHeroNode){
HeroNode temp=head.next;
boolean flag=false;
if(temp==null){
System.out.println("未找到数据");
return;
}
while(true){
if(temp.no==newHeroNode.no){
flag=true;
break;
}
if(temp.next==null){
break;
}
temp=temp.next;
}
if(flag==true){
temp.name=newHeroNode.name;
temp.nickName= newHeroNode.nickName;
}else{
System.out.println("未找到");
}
}
//通过一个辅助变量
public void list(){
if(head.next==null){
System.out.println("链表为空");
return;
}
HeroNode temp=head.next;
while(true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.next;
}
}
public boolean delete(int no){
HeroNode temp=head;
boolean flag=false;
if(temp.next==null){
System.out.println("未找到");
}
while (true){
//找到上一个节点
if(temp.next.no==no){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.next=temp.next.next;
}
return true;
}
public static void main(String[] args) {
SingleLinkedList singleLinkedList = new SingleLinkedList();
HeroNode heroNode = new HeroNode(1,"张三","张");
HeroNode heroNode2 = new HeroNode(12,"李四","李");
HeroNode heroNode3 = new HeroNode(6,"李四","李");
// singleLinkedList.addHero(heroNode);
// singleLinkedList.addHero(heroNode2);
// singleLinkedList.addHero(heroNode3);
singleLinkedList.addHeroOrder(heroNode);
singleLinkedList.addHeroOrder(heroNode2);
singleLinkedList.addHeroOrder(heroNode3);
singleLinkedList.list();
HeroNode heroNode4 = new HeroNode(7,"李四1","李1");
singleLinkedList.delete(12);
singleLinkedList.list();
}
}
class HeroNode{
int no;
String name;
String nickName;
HeroNode next;
public HeroNode( int no,String name,String nickName){
this.name=name;
this.no=no;
this.nickName=nickName;
}
@Override
public String toString() {
return "编号:"+no+","+"姓名:"+name+","+"昵称:"+nickName;
}
}