使用带head头的单向链表实现 - 水浒英雄排行榜管理完成对英雄任务的CRUD操作。

    1. 第一种方法在添加英雄时,直接添加到链表尾部

      思路分析示意图:
      image.png

    链表版本1.0,只能插入数据

    1. package com.atguigu.linkedlist;
    2. /**
    3. * 单向链表
    4. * @author Dxkstart
    5. * @create 2021-09-30-15:35
    6. */
    7. public class SingleLinkedListDemo {
    8. public static void main(String[] args) {
    9. //进行测试
    10. //先创建节点
    11. HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
    12. HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
    13. HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
    14. HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
    15. //先创建一个链表
    16. SingleLinkedList singleLinkedList = new SingleLinkedList();
    17. //加入
    18. singleLinkedList.add(hero1);
    19. singleLinkedList.add(hero4);
    20. singleLinkedList.add(hero3);
    21. singleLinkedList.add(hero2);
    22. //显示链表
    23. singleLinkedList.list();
    24. }
    25. }
    26. //定义HeroNode,每个HeroNode对象就是一个节点
    27. class HeroNode{
    28. public int no;
    29. public String name;
    30. public String nickname;
    31. public HeroNode next;//指向下一个节点,“链”
    32. //构造器
    33. public HeroNode(int no,String name,String nickname){
    34. this.no = no;
    35. this.name = name;
    36. this.nickname = nickname;
    37. }
    38. //为了显示方便,重写toString()方法
    39. @Override
    40. public String toString() {
    41. return "HeroNode{" +
    42. "no=" + no +
    43. ", name='" + name + '\'' +
    44. ", nickname='" + nickname +
    45. '}';
    46. }
    47. }
    48. //定义SingleLinkedList管理我们的英雄
    49. class SingleLinkedList{
    50. //先初始化一个头结点,头结点不要动,不存放具体的数据
    51. private HeroNode head = new HeroNode(0,"","");
    52. //添加节点到单向链表
    53. //思路:当不考虑编号顺序时
    54. //1.找到当前链表的最后节点
    55. //2.将最后这个节点的next指向新的节点
    56. public void add(HeroNode heroNode){
    57. //因为head节点不能动,因此我们需要一个辅助变量temp
    58. HeroNode temp = head;
    59. //遍历链表,找到最后
    60. while(true){
    61. //找到链表的最后
    62. if (temp.next == null){
    63. break;
    64. }
    65. //如果没有找到,把temp后移
    66. temp = temp.next;
    67. }
    68. //当退出while循环时,temp就指向了链表的最后
    69. //将最后这个节点的next指向新的节点
    70. temp.next = heroNode;
    71. }
    72. //显示链表[遍历]
    73. public void list(){
    74. if (head.next == null){
    75. System.out.println("链表为空!");
    76. return;
    77. }
    78. //头结点不能动,所以使用temp临时变量
    79. HeroNode temp = head;
    80. while (true){
    81. //判断是否到链表的最后了
    82. if (temp.next == null){
    83. break;
    84. }
    85. //输出节点信息
    86. System.out.println(temp.next);
    87. //将temp后移,不然是个死循环
    88. temp = temp.next;
    89. }
    90. }
    91. }