作者:猥琐的爆米花 | 来源:互联网 | 2023-06-01 23:04
链表介绍
链表是有序的列表,但是它在内存中是存储如下
1.链表是以节点的方式来存储,是链式存储
2.每个节点包含 data 域, next 域:指向下一个节点.
3.如图:发现链表的各个节点不一定是连续存储.
4.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定
单链表介绍
单链表(带头节点)逻辑结构示意图如下
单链表应用实例
使用带head头的单向链表实现 –漫威英雄排行榜管理
完成对英雄人物的增删改查操作, 注: 删除和修改,查找
- 第一种方法在添加英雄时,直接添加到链表的尾部
- 第二种方式在添加英雄时,根据排名将英雄插入到指定位置 (如果有这个排名,则添加失败,并给出提示)
package linkedlist;public class SingleLinkedListDemo {public static void main(String[] args) {HeroNode heroNode1 = new HeroNode(1, "托尼·史塔克", "钢铁侠");HeroNode heroNode2 = new HeroNode(2, "班纳博士", "绿巨人");HeroNode heroNode3 = new HeroNode(3, "斯嘉丽", "黑寡妇");HeroNode heroNode4 = new HeroNode(4, "帕克", "蜘蛛侠");HeroNode heroNode5 = new HeroNode(5, "洛基", "神");SingleLinkedList singleLinkedList = new SingleLinkedList();singleLinkedList.addByOrder(heroNode5);singleLinkedList.addByOrder(heroNode2);singleLinkedList.addByOrder(heroNode1);singleLinkedList.addByOrder(heroNode4);singleLinkedList.addByOrder(heroNode3);singleLinkedList.addByOrder(heroNode3);
HeroNode newHeroNode = new HeroNode(2, "baihaibai", "AHAHAHA");singleLinkedList.update(newHeroNode);singleLinkedList.list();System.out.println();singleLinkedList.del(1);singleLinkedList.del(3);singleLinkedList.list();}
}
class SingleLinkedList{private HeroNode head = new HeroNode(0, "", "");public void add(HeroNode heroNode){HeroNode temp = head;while(true){if(temp.next == null){break;}temp = temp.next;}temp.next = heroNode;}public void list(){if(head.next == null){System.out.println("链表为空");return;}HeroNode temp = head.next;while(true){if(temp == null){break;}System.out.println(temp);temp = temp.next;}}public void addByOrder(HeroNode heroNode){HeroNode temp =head;boolean flag = false;while(true){if(temp.next == null){break;}if(temp.next.no>heroNode.no){break;}else if(temp.next.no==heroNode.no){flag = true;break;}temp = temp.next;}if(flag){System.out.println("准备插入的英雄编号已经存在"+heroNode.no);}else{heroNode.next = temp.next;temp.next=heroNode;}}public void update(HeroNode newHeroNode){if(head.next==null){System.out.println("链表为空");return;}HeroNode temp = head.next;boolean flag = false;while(true){if(temp == null){break;}if(temp.no==newHeroNode.no){flag= true;break;}temp = temp.next;}if(flag){temp.name = newHeroNode.name;temp.nickname = newHeroNode.nickname;}else{System.out.println("没有找到编号为"+newHeroNode.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.println("要删除的节点"+no+"不存在");}}}
class HeroNode{public int no;public String name;public String nickname;public HeroNode next;public HeroNode(int no,String name,String nickname){super();this.no = no;this.name = name;this.nickname = nickname;}@Overridepublic String toString() {return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";}}