ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-02-04 21:05:13  阅读:146  来源: 互联网

标签:Java temp HeroNode SerialNumber 单向 next 链表 public


一:单向链表:

(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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有