- 链表是以节点的方式存储,又称链式存储
- 节点包含:date域、next域,next域指向下一个节点
- 链表各个节点不一定是连续存储
- 链表分为带头节点链表和不带头节点链表
public class Demo01_SinglelinkedList { public static void main(String[] args) { // 创建节点 Animal animal1 = new Animal(1, "小花", 1, 100); Animal animal2 = new Animal(3, "小黑", 3, 300); Animal animal3 = new Animal(2, "小黄", 2, 500); Animal animal4 = new Animal(6, "小猫", 6, 700); Animal animal5 = new Animal(5, "小白", 7, 900); // 添加节点 AnimallinkedList animallinkedList = new AnimallinkedList(); animallinkedList.addByMoney(animal1); animallinkedList.addByMoney(animal4); animallinkedList.addByMoney(animal5); animallinkedList.addByMoney(animal2); animallinkedList.addByMoney(animal3); // 修改节点 Animal animal6 = new Animal(6, "笑笑", 2, 1000); animallinkedList.update(animal6); // 删除节点 animallinkedList.delete(6); // 遍历链表 animallinkedList.showlinkedList(); } } // 创建带头节点的单链表 class AnimallinkedList { // 定义头节点 private Animal headAnimal = new Animal(0, "", 0, 0.0); // 添加节点-----按添加顺序加入 public void add(Animal newAnimal) { // 1、新建一个指针,指向当前链表的头节点 Animal temp = headAnimal; // 2、使用指针,遍历整个单链表,找到最后一个节点 while (true) { // 判断是否为最后一个节点 if (temp.nextAnimal == null) { break; } temp = temp.nextAnimal; } // 3、修改指针指向的最后一个节点next值,并使指针指向新节点 temp.nextAnimal = newAnimal; } // 添加节点-----按编号大小的顺序加入 public void addByMoney(Animal newAnimal) { // 1、新建一个指针,指向当前链表的头节点 Animal temp = headAnimal; boolean flag = false;//用来判断编号是否重复 // 2、遍历链表,找到新添加节点的位置 while (true) { // 已经到最后一个节点 if (temp.nextAnimal == null) { break; } // 寻找新节点位置 if (temp.nextAnimal.no > newAnimal.no) { break; } else if (temp.nextAnimal.no == newAnimal.no) { flag = true;//编号已经存在 break; } temp = temp.nextAnimal; } if (flag) { System.out.println("编号已经存在,无法添加"); } else { // 3、添加新节点 newAnimal.nextAnimal = temp.nextAnimal; temp.nextAnimal = newAnimal; } } // 修改节点信息 public void update(Animal newAnimal) { // 判断节点是否为空 if (headAnimal.nextAnimal == null){ System.out.println("链表为空"); return; } // 遍历链表,修改节点信息 // 定义一个指针 Animal temp = headAnimal.nextAnimal; boolean flag = false;// 标识节点是否找到 while (true){ // 判断节点是否为最后一个节点 if (temp == null){ break; } // 找到节点 if (temp.no == newAnimal.no){ flag = true; break; } // 指针后移 temp = temp.nextAnimal; } if (flag){ temp.name = newAnimal.name; temp.money = newAnimal.money; temp.age = newAnimal.age; }else { System.out.println("节点没有找到"); } } // 删除节点 public void delete(int no){ // 判断链表是否为空 if (headAnimal.nextAnimal == null){ System.out.println("链表为空"); return; } // 遍历链表 Animal temp = headAnimal; boolean flag = false; while (true){ // 判断是否为最后一个节点 if (temp.nextAnimal == null){ break; } // 是否找到节点 if (temp.nextAnimal.no == no){ flag = true; break; } temp = temp.nextAnimal; } // 删除已找到的节点 if (flag){ temp.nextAnimal = temp.nextAnimal.nextAnimal; }else { System.out.println("未找到节点"); } } // 显示链表 public void showlinkedList() { // 判断链表是否为空 if (headAnimal.nextAnimal == null) { System.out.println("链表为空"); return; } // 遍历链表 // 定义一个指针 Animal temp = headAnimal.nextAnimal; while (true) { if (temp == null) { break; } // 输出节点 System.out.println(temp); // 指针向后移一位 temp = temp.nextAnimal; } } } // 定义节点 class Animal { public int no; public String name; public int age; public double money; public Animal nextAnimal; public Animal(int no, String name, int age, double money) { this.no = no; this.name = name; this.age = age; this.money = money; } @Override public String toString() { return "Animal{" + "no='" + no + ''' + ", name='" + name + ''' + ", age=" + age + ", money=" + money + '}'; } }
声明:如有文章侵权,请及时联系本人,以便后续及时作出修改。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)