“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情”
1>求单链表中有效节点的个数
1> 思路分析:获取到单链表的节点个数,若有头结点则不统计头结点
代码实现:
if (head.next==null) {//空链表
return 0;
}
//定义长度
int length=0;
//定义辅助长度
HeroNode cur=head.next;
while(cur!=null) {
length++;
cur=cur.next; //遍历
}
return length;
}
2>查找单链表中的倒数第k个节点
2>思路分析:1.在上传节点的同时,要给一个index值,这个index值代表着倒数第几个节点
2.将链表进行遍历,然后统计出共有几个节点getlength
3.得到长度后,再用(长度-index),即可得到要找的节点
4.若找到返回该节点,找不到则返回空值
代码实现:
//获取到单链表的倒数第k个节点
if (head.next==null) {//空链表
return null;
}
//第一次变量得到长度个数
int length=getlength(head);
//先判断一下index输入的有没有问题
if(index<=0||index>length) {
System.out.println("index输入错误");
return null;
} else {
//第二次变量到length-index位置,就是我们要找的k节点
//定义辅助变量
HeroNode cur=head.next;
int i=0;
while(i<length-index) {
i++;
cur=cur.next; //遍历
}
return cur;
}
}
3>单链表的翻转
3>思路分析:1.先定义一个节点reservedHead=new HeroNode();
2.从头到尾遍历节点,每遍历一个节点,就将其取出,放在新的链表head的最前端(将新链表.next=旧的链表,reservedHead.next=新链表),先更新节点的next域,之后带着后面的数据再确定位置
3.用head指向新的节点
代码实现
if (head.next==null||head.next.next==null) {
//空链表和单个链表无需判断
return;
}
HeroNode reservedhead=new HeroNode(0, null, null);
HeroNode cur=head.next; //帮助遍历链表
HeroNode next=null;//指向当前节点cur的下一个节点
//遍历原来链表,并将最新的节点放在最前面
while (cur!=null) {
next=cur.next; //先暂时保存当前节点的下一个节点,因为后 面需要使用
//下面两行不可替换原因,若替换会把反向链表搞断,链表顺序 调整,先确定节点的next域,之后带着后面的数据再确定位置
cur.next=reservedhead.next;//将cur的下一个节点指向新的 链表的最前端
reservedhead.next=cur;//将后面的链表链接起来
cur=next;//让next后移
}
//将head.next指向reservedhead.next,实现单链表的翻转
head.next=reservedhead.next;
}
}