编程语言
首页 > 编程语言> > 单向链表及使用Java代码实现

单向链表及使用Java代码实现

作者:互联网

一:单向链表:

(1):链表是以节点的形式存储数据,节点对象中存储了要保存的数据。

(2):单向链表中的每一个节点中都持有下一个节点的引用,通过上一个节点就可以找到下一个节点,依次串联,所以想要遍历整个单向链表就需要找到第一个节点。

(3):链表不同于数组,在内存中不一定是连续的空间,由于是节点存储,可以利用内存中零散的空间进行保存,只需持有下一个节点的地址即可。

 

 二:接下来我们使用Java代码实现单向链表(不是故意写中文类名的,请勿喷)

 

 

public class 单向链表 {
    public static void main(String[] args) {
        HeroNode name1=new HeroNode(1,"小袁","世界上最帅的男人");
        HeroNode name2=new HeroNode(2,"xx","xx");
        HeroNode name3=new HeroNode(3,"ww","ww");
        HeroNode name4=new HeroNode(4,"vv","xx");
    SingleLinkedList singleLinkedList=new SingleLinkedList();
        singleLinkedList.add1(name1);
        singleLinkedList.add1(name4);
        singleLinkedList.add1(name3);
        singleLinkedList.add1(name2);
        singleLinkedList.list();
        System.out.println("修改后---------------");
        HeroNode n=new HeroNode(2,"bb","bb");
        singleLinkedList.update(n);
       singleLinkedList.list();
        System.out.println("删除后--------------");
          singleLinkedList.delete(2);
        singleLinkedList.list();
    }
}

//管理信息
class SingleLinkedList{
    //定义头节点,不存放具体数据
    private HeroNode head=new HeroNode(0,"","");
    //定义按顺序添加方法
    public  void add1(HeroNode heroNode){
        //定义辅助变量
        HeroNode temp=head;
        //定义标志
        boolean flag=false;
        while (true){
          if(temp.next==null){
              break;
          }
            if(temp.next.SerialNumber>heroNode.SerialNumber){
                //说明位置找到,在temp后面插入
                break;
            }
            else if(temp.next.SerialNumber==heroNode.SerialNumber){
               //说明添加信息已存在
                flag=true;
            }
            //后移遍历链表
         temp=temp.next;
        }
if(flag){
    System.out.println("信息已存在");
}else {
    //插入到链表
    heroNode.next=temp.next;
    temp.next=heroNode;
}
    }
    //定义修改节点方法
    public  void update(HeroNode newHeroNode){
        if(head.next==null){
            System.out.println("链表为空");
            return;
        }
        //定义辅助变量
        HeroNode temp=head.next;
        //定义标志
        boolean flag=false;
        while (true) {
            if (temp.next == null) {
                break;
            }
            if(temp.SerialNumber==newHeroNode.SerialNumber){
               flag=true;
                break;
            }
            temp=temp.next;
        }
  if(flag){
      temp.name=newHeroNode.name;
      temp.information=newHeroNode.information;
  }else {
      System.out.println("没有找到");
  }
    }
//定义删除方法
public void delete(int SerialNumber){
    HeroNode temp=head;
    boolean flag=false;
while (true){
    if(temp.next==null){
       break;
    }
    if(temp.next.SerialNumber==SerialNumber){
        flag=true;
        break;
    }
    temp=temp.next;
}
if(flag){
    temp.next=temp.next.next;
}
}
  //遍历
    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=temp.next;
        }
    }
}
class HeroNode{
    public int SerialNumber;
    public String name;
    public String information;
    //指向下一个节点
    public HeroNode next;
    public HeroNode(int SerialNumber,String name,String information){
        this.SerialNumber=SerialNumber;
        this.name=name;
        this.information=information;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "SerialNumber=" + SerialNumber +
                ", name='" + name + '\'' +
                ", information='" + information + '\'';
    }
}

运行结果:

 

标签:Java,temp,HeroNode,SerialNumber,单向,next,链表,public
来源: https://www.cnblogs.com/xioayuan/p/14374943.html