尚硅谷:链表
package com.zlt.linkedlist; public class SinglelinkedListDemo { public static void main(String[] args) { //进行测试 //先创建节点 HeroNode hero1 = new HeroNode(1,"宋江","及时雨"); HeroNode hero2 = new HeroNode(2,"卢俊义","玉麒麟"); HeroNode hero3 = new HeroNode(3,"吴用","智多星"); HeroNode hero4 = new HeroNode(4,"林冲","豹子头"); //创建要给的链表 SinglelinkedList singlelinkedList = new SinglelinkedList(); //加入 singlelinkedList.add(hero1); singlelinkedList.add(hero4); singlelinkedList.add(hero3); singlelinkedList.add(hero2); //显示一下 singlelinkedList.list(); } } //定义SinglelinkedList 管理我们的英雄 class SinglelinkedList { //先初始化一个头结点,头结点不懂,不存放具体的数据 private HeroNode head = new HeroNode(0,"",""); //添加节点到单向链表 //思路,当不考虑编号顺序时 //1,找到当前链表的最后节点 //2,将最后这个节点的next 指向新的节点 public void add(HeroNode heroNode){ //因为head节点不能动,因此我们需要一个辅助遍历temp HeroNode temp = head; //遍历链表,找到最后 while (true){ //找到链表的最后 if (temp.next == null){// break; } //如果没有找到最后,将temp后移 temp = temp.next; } //当退出while循环时,temp就指向了链表的最后 //将最后这个节点的next指向新的节点 temp.next = heroNode; } //显示链表[遍历] 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; } } } //定义HeroNode,每个Heronode 对象就是一个节点 class HeroNode{ public int no; public String name;//名字 public String nickname;//昵称 public HeroNode next;//指向下一个节点 //构造器 public HeroNode(int no,String name,String nickname){ this.no = no; this.name = name; this.nickname = nickname; } //为了显示方法,我们重写toString @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + ''' + ", nickname='" + nickname + ''' + '}'; } }
如果插入的英雄的序号不是按照顺序的,我们需要将它按照顺序输出出来,下面的代码就是经过优化后的。
序号按照1,4,2, 3进行的输入。
输出的顺序
package com.zlt.linkedlist; public class SinglelinkedListDemo { public static void main(String[] args) { //进行测试 //先创建节点 HeroNode hero1 = new HeroNode(1,"宋江","及时雨"); HeroNode hero2 = new HeroNode(2,"卢俊义","玉麒麟"); HeroNode hero3 = new HeroNode(3,"吴用","智多星"); HeroNode hero4 = new HeroNode(4,"林冲","豹子头"); //创建要给的链表 SinglelinkedList singlelinkedList = new SinglelinkedList(); //加入 singlelinkedList.addByOrder(hero1); singlelinkedList.addByOrder(hero4); singlelinkedList.addByOrder(hero2); singlelinkedList.addByOrder(hero3); //显示一下 singlelinkedList.list(); } } //定义SinglelinkedList 管理我们的英雄 class SinglelinkedList { //先初始化一个头结点,头结点不懂,不存放具体的数据 private HeroNode head = new HeroNode(0,"",""); //添加节点到单向链表 //思路,当不考虑编号顺序时 //1,找到当前链表的最后节点 //2,将最后这个节点的next 指向新的节点 public void add(HeroNode heroNode){ //因为head节点不能动,因此我们需要一个辅助遍历temp HeroNode temp = head; //遍历链表,找到最后 while (true){ //找到链表的最后 if (temp.next == null){// break; } //如果没有找到最后,将temp后移 temp = temp.next; } //当退出while循环时,temp就指向了链表的最后 //将最后这个节点的next指向新的节点 temp.next = heroNode; } //第二种方式在添加英雄时,根据排名将英雄插入到指定位置 //如果有这个排名,则添加失败,并给出提示 public void addByOrder(HeroNode heroNode){ //因为头结点不能动,因此我们仍然通过一个辅助指针(变量)来帮助添加的位置 //因为为单链表,所以我们找的temp是位于添加位置的前一个节点,否则插入不了 HeroNode temp = head; boolean flag = false;//flag标志添加的编号是否存在,默认为false while (true){ if (temp.next == null){ //说明temp已经在链表的最后 break; } if (temp.next.no > heroNode.no){//位置找到,就在temp的后面插入 break; }else if (temp.next.no == heroNode.no){//说明希望添加的heroNode的编号已然存在 flag = true; break; } temp = temp.next;//后移,遍历当前链表 } //判断flag的值 if (flag){//不能添加,说明编号存在 System.out.printf("准备插入的英雄的编号%d已经存在了,不能加入n",heroNode.no); }else { //插入到链表中,temp的后面 heroNode.next = temp.next; temp.next = heroNode; } } //显示链表[遍历] 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; } } } //定义HeroNode,每个Heronode 对象就是一个节点 class HeroNode{ public int no; public String name;//名字 public String nickname;//昵称 public HeroNode next;//指向下一个节点 //构造器 public HeroNode(int no,String name,String nickname){ this.no = no; this.name = name; this.nickname = nickname; } //为了显示方法,我们重写toString @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + ''' + ", nickname='" + nickname + ''' + '}'; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)