1,链表是以节点的方式来存储的;

2,每个节点包含data域、next域:指向下一个节点;

3,链表的每个节点不一定是连续的;

4,链表分带头节点的链表,和不带头节点的链表,根据实际情况来决定。

带头节点的单向链表

头节点

1,存放具体数据

2,作用就是作为单链表的头

带头节点的单链表

添加(创建)

1,先创建一个头结点

2,添加其他节点,直接加入到链表的最后

package com.datastack.linkedlist;public class SimpleLinkedList {public HeroNode head = new HeroNode(0,"","");//头结点/** * 添加方法:不考虑顺序添加 * 1,找到最后节点 * 2,将最后节点的next指向 新的节点 * @param heroNode */public void add(HeroNode heroNode){HeroNode temp = head;while(true){if(temp.next == null){break;}temp = temp.next;}temp.next = heroNode;}/** * 按编号从小到大顺序添加 * @param heroNode */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.printf("准备插入的英雄的编号 %d 已存在,不能添加\n",heroNode.no);}else{heroNode.next = 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;}}/** * 修改 * @param heroNode */public void update(HeroNode heroNode){HeroNode temp = head.next;boolean flag = false;//表示是否找到该节点while(true){if(temp == null){break;}if(temp.no == heroNode.no){flag = true;break;}temp  = temp.next;}if(flag){temp.name = heroNode.name;temp.nickname = heroNode.nickname;}else{System.out.println("没有找到要修改的编号");}}/** * 删除 * @param heroNode */public void delete(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("没有找到要删除的节点");}}}

package com.datastack.linkedlist;public class HeroNode {public int no;public String name;public String nickname;//昵称public HeroNode next;//下一个节点//构造器public HeroNode(int no,String name,String nickname){this.no = no;this.name = name;this.nickname = nickname;}//打印public String toString(){return "HeroNode [no="+no+",name="+name+",nickname="+nickname+"]";}}

package com.datastack.linkedlist;public class SimpleLinkedListDemo {public static void main(String[] args) {HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");HeroNode hero3 = new HeroNode(3, "吴用", "智多星");HeroNode hero2 = new HeroNode(2, "卢俊义", "王麒麟");HeroNode hero4 = new HeroNode(4, "林冲", "爆炸头");SimpleLinkedList linkedList = new SimpleLinkedList();linkedList.addByOrder(hero1);linkedList.addByOrder(hero4);linkedList.addByOrder(hero2);linkedList.addByOrder(hero3);linkedList.list();HeroNode heroNode = new HeroNode(2, "wuyong", "wy");linkedList.update(heroNode);System.out.println("修改后");linkedList.list();System.out.println("删除后");linkedList.delete(1);linkedList.list();System.out.println("删除后");linkedList.delete(4);linkedList.list();}}