单向链表及使用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