1、找到新添加的节点的位置,是通过辅助变量(指针),通过遍历。
2、新的节点.next=temp.next
3、将temp.next=新的节点
代码实现:
package com.huaze.sparsearray; 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(hero2); // singlelinkedList.add(hero3); //加入按照编号的顺序 singlelinkedList.addByorder(hero1); singlelinkedList.addByorder(hero4); singlelinkedList.addByorder(hero2); singlelinkedList.addByorder(hero3); 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就指向了链表的最后 temp.next = heroNode; } //第二种方式在添加英雄时,根据排名将英雄插入到指定位置 //(如果有这个排名,则添加失败,并给出提示) public void addByorder(Heronode heroNode) { //因为头节点不能动,因此仍然要通过一个辅助指针(变量)来帮助找到添加的位置 //因为是单链表,因此我们找的temp是位于添加位置的前一个节点,否则插入失败 Heronode temp = head; boolean flag = false; //标志添加的编号是否存在,默认为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); //将next后移 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 ninckname) { this.no = no; this.name = name; this.nickname = ninckname; } //为了显示方便,重写toString方法 @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + ''' + ", nickname='" + nickname + ''' + '}'; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)