学习笔记-单链表(按顺序插入,修改,删除)

    技术2022-07-12  62

    按顺序插入节点(分析)

    代码实现

    /** * 根据英雄的排名插入到指定的位置 * (如果有这个排名,则添加失败,并给出提示) */ public void addByOrder(HeroNode node) { //因为头节点不能动,我们仍然需要通过一个辅助变量来帮助我们找到指定的位置 //因为单链表,因为我们找的temp是位于添加位置的前一个节点,否则插入不了 HeroNode temp = head; boolean flag = false; while (true) { //说明temp已经到了最后 if (temp.next == null) { break; } if (temp.next.no > node.no) { break;//位置已经找到 } else if (temp.next.no == node.no) { flag = true; break; } temp = temp.next;//后移,遍历当前链表 } if (flag) { //不能新增 System.out.printf("准备插入的英雄编号%d已经存在,不能添加\n", node.no); } else { //可以添加 node.next = temp.next; temp.next = node; } //System.out.println(head.next.toString());//理解临时节点的含义 }

    修改需求及分析

    需求:给出一个新的节点,将英雄人物的姓名和昵称修改,编号不变(根据编号来查找) 分析:将临时变量指向头节点的下一个节点,通过临时变量的编号和新节点的编号比较,如果相同就将名字和昵称修改掉

    代码实现

    public void update (HeroNode node) { //要修改的英雄信息 if (head.next == null) { System.out.println("链表为空~"); } //需要找到修改的节点,根据no编号 HeroNode temp = head.next; boolean flag = false;//用于判断是否找到 while (true) { if (temp == null) { break;//遍历完链表 } if (temp.no == node.no) { //找到了 flag = true; break; } temp = temp.next; } if (flag) { // temp.name = node.name; temp.nickname = node.nickname; } else { System.out.printf("没有找到编号%d的节点,不能修改\n",node.no); } }

    删除分析

    代码实现

    /** * 删除节点 * head不能动,因此我们需要一个temp辅助节点找到待删除的前一个节点 * 我们在比较时,时temp.next.no 和需要删除的节点no比较 */ public void del(int no) { HeroNode temp = head; boolean flag = false;//是否找到要删除的节点 while (true) { if (temp.next == null) { break; } if (temp.next.no == no) { //找到了 flag = true; break; } temp = temp.next;//后移 } if (flag) { temp.next = temp.next.next; } else { System.out.printf("没有找到%d节点\n",no); } }

    测试

    public class SingleLinkedListDemo { //测试 public static void main(String[] args) { //添加按照顺序 HeroNode heroNode = new HeroNode(1, "宋江", "及时雨"); HeroNode heroNode1 = new HeroNode(2, "卢俊义", "玉麒麟"); HeroNode heroNode2 = new HeroNode(3, "吴用", "智多星"); HeroNode heroNode3 = new HeroNode(4, "林冲", "豹子头"); HeroNode heroNode5 = new HeroNode(1, "宋江", "及时雨"); //创建链表 SingleLinkedList singleLinkedList = new SingleLinkedList(); singleLinkedList.addByOrder(heroNode2); singleLinkedList.addByOrder(heroNode5); singleLinkedList.addByOrder(heroNode1); singleLinkedList.addByOrder(heroNode); singleLinkedList.addByOrder(heroNode3); singleLinkedList.list(); System.out.println("修改后的链表"); //修改测试代码 HeroNode newheroNode = new HeroNode(2, "小卢", "玉麒麟~~"); singleLinkedList.update(newheroNode); singleLinkedList.list(); //删除节点 singleLinkedList.del(1); singleLinkedList.del(4); singleLinkedList.del(2); singleLinkedList.del(3); System.out.println("删除后的节点"); singleLinkedList.list(); } }
    Processed: 0.015, SQL: 9