链表介绍
链表是有序的列表,它在内存中存储如下
小结上图:
- 链表是以节点的方式来存储,是链式存储
- 每个节点包含 data 域, next 域:指向下一个节点.
- 如图:发现链表的各个节点不一定是连续存储.
- 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定
链表插入
直接插入到链表的尾部
添加(创建)
1. 先创建一个head 头节点, 作用就是表示单链表的头
2. 后面我们每添加一个节点,就直接加入到 链表的最后
遍历: 1. 通过一个辅助变量遍历,帮助遍历整个链表
在中间随机一个位置添加节点
1. 首先找到新添加的节点的位置, 是通过辅助变量(指针), 通过遍历来搞定
2. 新的节点.next = temp.next
3. 将temp.next = 新的节点
修改节点
思路
1. 先找到该节点,通过遍历,
2. temp.name = newHeroNode.name ; temp.nickname= newHeroNode.nickname
删除节点
从单链表中删除一个节点的思路
1. 我们先找到 需要删除的这个节点的前一个节点 temp
2. temp.next = temp.next.next
3. 被删除的节点,将不会有其它引用指向,会被垃圾回收机制回收
代码实现
package linkedlist;
public class SingleLinkedListDemo {
public static void main(String[] args) {
//先创建节点
HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
//
SingleLinkedList singleLinkedList = new SingleLinkedList();
//节点添加至链表
/*
* singleLinkedList.add(hero1); singleLinkedList.add(hero4);
* singleLinkedList.add(hero2); singleLinkedList.add(hero3);
*/
//添加按照编号的顺序
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero4);
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero3);
//遍历
singleLinkedList.list();
//测试修改节点的代码
HeroNode newHeroNode = new HeroNode(2, "小卢", "玉麒麟~~");
singleLinkedList.update(newHeroNode);
System.out.println("修改后的链表情况~~");
singleLinkedList.list();
//删除一个节点
singleLinkedList.delete(1);
singleLinkedList.delete(4);
System.out.println("删除后的链表情况~~");
singleLinkedList.list();
}
}
//定