• 链表


      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 }
  • 相关阅读:
    cakephp异常机制
    你的效率是整理出来的——张一驰
    eclipse常用总结
    cakephp写Lib要点
    代码整洁之道-马丁-第3章 函数
    PHP静态方法如何编写
    编程常用工具
    代码大全(第二版)
    PHP实现AES对称加密
    【pytest】(三) pytest运行多个文件
  • 原文地址:https://www.cnblogs.com/-xuewuzhijing-/p/12883654.html
Copyright © 2020-2023  润新知