链表

  1 package linkedlist;
  2 
  3 public class SingleLinkedListDemo {
  4 
  5     public static void main(String[] args) {
  6         HeroNode hero1 = new HeroNode(1, "唐僧", "师傅");
  7         HeroNode hero2 = new HeroNode(2, "孙悟空", "大师兄");
  8         HeroNode hero3 = new HeroNode(3, "猪八戒", "二师兄");
  9         HeroNode hero4 = new HeroNode(4, "沙和尚", "三师弟");
 10         SingleLinedList singleLinedList = new SingleLinedList();
 11 
 12         // singleLinedList.add(hero1);
 13         // singleLinedList.add(hero2);
 14         // singleLinedList.add(hero3);
 15         // singleLinedList.add(hero4);
 16 
 17         singleLinedList.addByOrder(hero1);
 18         singleLinedList.addByOrder(hero4);
 19         singleLinedList.addByOrder(hero2);
 20         singleLinedList.addByOrder(hero3);
 21         singleLinedList.addByOrder(hero3);
 22 //测试修改节点的代码
 23         HeroNode newHeroNode = new HeroNode(2, "六耳猕猴", "假悟空");
 24         singleLinedList.update(newHeroNode);
 25         // 删除一个节点
 26         singleLinedList.del(2);
 27         singleLinedList.del(3);
 28         singleLinedList.list();
 29     }
 30 
 31 }
 32 
 33 //定义一个singleLinkedList 
 34 class SingleLinedList {
 35     // 先初始化一个头节点,头节点不要动,不存放具体的数据
 36     private HeroNode head = new HeroNode(0, "", "");
 37     // 添加节点到单向链表
 38     // 1.找到当前链表的最后
 39     // 2.将最后这个节点的next指向新的节点
 40 
 41     public void add(HeroNode heronode) {
 42         // 因为head节点不能动,因此我们需要一个辅助遍历temp
 43         HeroNode temp = head;
 44         while (true) {
 45             if (temp.next == null) {
 46                 break;
 47             }
 48             temp = temp.next;
 49         }
 50         temp.next = heronode;
 51     }
 52 
 53     // 第二种方式在添加英雄时,根据排名将英雄插入到指定位置
 54     // (如果有这个排名,则添加失败,并给出提示)
 55     public void addByOrder(HeroNode heroNode) {
 56         HeroNode temp = head;
 57         boolean flag = false;// 标志添加的编号是否存在,默认为false
 58         while (true) {
 59             if (temp.next == null) {
 60                 break;
 61             }
 62             if (temp.next.no > heroNode.no) {// 位置找到在temp的后面加入
 63                 break;
 64 
 65             } else if (temp.next.no == heroNode.no) {
 66                 flag = true;
 67                 break;
 68             }
 69             temp = temp.next;
 70         }
 71         if (flag == true) {
 72             System.out.println("准备插入的英雄编号" + heroNode.no + "已经存在");
 73 
 74         } else {
 75             heroNode.next = temp.next;
 76             temp.next = heroNode;
 77         }
 78     }
 79 
 80 //根据编号修改节点的信息
 81     public void update(HeroNode newHeroNode) {
 82 
 83         if (head.next == null) {
 84             System.out.println("链表为空~");
 85             return;
 86         }
 87         HeroNode temp = head.next;
 88         boolean flag = false;
 89         while (true) {
 90             if (temp == null) {
 91                 break;// 已经遍历完列表
 92             }
 93             if (temp.no == newHeroNode.no) {
 94                 flag = true;
 95                 break;
 96             }
 97             temp = temp.next;
 98         }
 99         // 根据flag,判断是否找到要修改的节点
100         if (flag) {
101             temp.name = newHeroNode.name;
102             temp.nickname = newHeroNode.nickname;
103         } else {
104             System.out.println("没有找到编号为" + newHeroNode.no + "的节点,不能修改");
105         }
106 
107     }
108 
109     public void del(int no) {
110         HeroNode temp = head;
111         boolean flag = false;
112         while (true) {
113             if (temp.next == null) {
114                 break;
115             }
116             if (temp.next.no == no) {
117                 flag = true;
118                 break;
119             }
120             temp = temp.next;
121         }
122         if (flag) {
123             temp.next = temp.next.next;
124         } else {
125             System.out.println("要删除的节点" + no + "不存在");
126         }
127     }
128 
129     // 显示链表【遍历】
130     public void list() {
131         if (head.next == null) {
132             System.out.println("链表为空");
133             return;
134         }
135         HeroNode temp = head.next;
136         while (true) {
137             if (temp == null) {
138                 break;
139             }
140             System.out.println(temp);
141             temp = temp.next;
142         }
143     }
144 
145 }
146 
147 //定义HeroNode,每个HeroNode对象就是一个节点
148 class HeroNode {
149     public int no;
150     public String name;
151     public String nickname;
152     public HeroNode next;// 指向下一个节点
153 
154     // 构造器
155     public HeroNode(int no, String name, String nickname) {
156         super();
157         this.no = no;
158         this.name = name;
159         this.nickname = nickname;
160     }
161 
162     // 重写toString
163     @Override
164     public String toString() {
165         return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";
166     }
167 
168 }
原文地址:https://www.cnblogs.com/-xuewuzhijing-/p/12883654.html