执行到这里,我们就有了这样一个节点,而链表就是由这一个个节点,串成的。
 
我们已经知道怎么实例化一个节点,但是我们又怎么做,才能知道下一个节点的地址呢?
======================================================================================================
要想知道它怎么做,我们必须实现 它 的 一个 头插 和 尾插, 等等一系列操作,但是我们目前先不管它
我们现在最重要的是 了解 链表的结构
============================================================================
理解链表中: 带头、不带头、单向、双向、循环、不循环的意思。
带头 和 不带头
循环 和 不循环
单向 和 双向
==================================================================================
======================================================================================
以穷举的方式 创建一个链表 (这方法很low,不建议去这样写,现在只是为了帮助我们去理解链表)
 
先创建五个节点
将五个节点连接起来。
现在链表结构,已经构造好了,它的头节点就是节点1,将 节点一 的地址 赋给 头引用 head
=====================================================================
首先,我要区分清楚,链表 不是顺序表,不是一块连续的空间。 链表的每个元素 是由地址来连接起来的。
也就是说 我们不能使用普通思维模式 去思考 遍历链表的数据域的值
既然 链表是靠地址联系起来的,也就是说 靠 next域中 存储的地址来联系个节点的数据
这就是我们突破点。
利用 head 遍历每个每个节点的数据 写法 head = head/next,你可以参考上面的图,来细品。
这样我们就跳转到下一个节点,算了我还是画个图,请看下图(注意我埋了一个坑,你们等会就知道,只有被打过,才会知道疼)
解决方法 (创建一个head的替身 【cur == current — 目前的】,来代替head去遍历链表数据)
代码如下:
调用者程序
效果图
另外注意一点
效果图
遍历链表的时候, 尤其是我们现在所讲的 不带头的链表,一定注意,不要让 头引用丢失,创建一个替身变量,让它去做。
保证头引用指向的永远都是 头节点,
=======================================================================
public boolean contains(int key){
ListNode cur = this.head;
while(cur!=null){
if(cur.val==key){
return true;
}
cur = cur.next;
}
return false;
}
附图
效果图(最好两边加中间,还有找不到的情况都要测试一下)
 
public int size(){
int count=0;
ListNode cur = this.head;
while(cur!=null){
count++;
cur=cur.next;
}
return count;
}
附图
public void addFirst(int data){
ListNode node = new ListNode(data);
node.next = this.head;
this.head = node;
}
附图
效果图
public void addLast(int data){
ListNode node = new ListNode(data);
if(this.head == null){
this.head = node;
}else{
ListNode cur = this.head;
while(cur.next!=null){
cur = cur.next;
}
cur.next = node;
}
}
附图
*****
效果图
public void addIndex(int index,int data){
if(index<0 || index>size()){
System.out.println(“插入数据节点的位置不合法”);
return;
}
if(index==0){
addFirst(data);// 调用头插
return;
}
if(index== size()){
addLast(data);
return;
}
ListNode cur = findIndex(index);// 接收 index-1位置节点的地址
ListNode node = new ListNode(data);// 根据 data的值,新建一个节点
// 插入节点程序
node.next = cur.next;
cur.next = node;
}
// 找到index-1位置的节点位置
// 跟图解解释的一样,如果你要插入一个位置,你就需要找它的前一个节点的位置
// 而我们是链表没有下标,所以返回是 前一个节点的地址
public ListNode findIndex(int index){
ListNode cur = this.head;
while(index-1 != 0){
cur = cur.next;
index–;
}
return cur;
}
附图
效果图
public void remove(int key){
if(this.head == null){// head为空
System.out.println(“链表为空,无数字可删除!”);
return;
}
if(this.head.val == key){// 判断头节点是为删除数字
this.head = this.head.next;
return;
}
ListNode cur = searchPrev(key);// 找到删除节点的前一个节点
if(cur == null){
System.out.println(“没有你要删除元素”);
return;
}
ListNode del = cur.next;// 要删除的节点地址
cur.next = del.next;// 删除节点
}
// 寻找删除节点的前一个节点(key的前驱)
public ListNode searchPrev(int key){
ListNode cur = this.head;
while(cur.next != null){
if(cur.next.val == key)
{
return cur;
}
cur = cur.next;
}
return null;// 表示没找到
}
附图
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
/img-blog.csdnimg.cn/8cfcab4892b14fb1b210619d132ea707.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-n780QSq7-1715572266364)]
[外链图片转存中…(img-sgNs9DWN-1715572266365)]
[外链图片转存中…(img-LRqMByzK-1715572266365)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!