完整代码示例-Java实现找出单链表的倒数第K个结点
废话不多说,直接上代码:
package DataStrcture.ArrayDemo.singlelistdemo;
public class GetLastNode {
//内部结点类
public static class Node{
Node next;
int num;
///构造器, tostring()
public Node(int num){
this.num = num;
}
@Override
public String toString() {
return "Node{num=" + num +
'}';
}
}
///头结点
Node head = new Node(0);
///得到结点的长度
public int getLength(){
//临时变量
Node temp = head;
int count=0;
if(temp.next == null)
return 0;
while(true){
if(temp.next == null)
break;
temp = temp.next;
count++;
}
return count;
}
///得到倒数第k个节点
/*
思路: 首先, 单链表只能顺序访问
2. 要得到倒数第k个链表, 我们需要知道链表的长度length
3. 然后很简单, 直接访问 第length-k个结点(那就是妥妥的倒数第k个结点)就可以了呀
*/
public Node getLastIndexNode(int index){
///临时结点搞起来
Node temp = head.next; ///head是无用结点, 所以我们从直接把临时变量temp指向首元结点
int count =0;
// 链表长度
int length = getLength();
///对 index做一个校验
if( index <=0 || index > length) {
System.out.println("输入的位置索引不规范!")
return null;
}
///判空
if( length == 0 || temp.next == null){
System.out.println("链表为空");
return null;
}
//访问第 size - k个结点, 即是倒数第k个结点
while(true){
temp = temp.next;
count++;
if(count == (length-index)) ///我们的temp初始位置是head结点, count需要多
break;
}
return temp;
}
///结点加入链表
public void add(Node node){
Node temp = head;
while(true){
if(temp.next == null)
break;
temp = temp.next;
}
temp.next = node;
}
public static void main(String[] args) {
//链表
GetLastNode gln = new GetLastNode();
//结点
Node node_1 = new Node(6);
Node node_2 = new Node(1);
Node node_3 = new Node(7);
Node node_4 = new Node(2);
Node node_5 = new Node(9);
Node node_6 = new Node(5);
///结点加入链表
gln.add(node_1);
gln.add(node_2);
gln.add(node_3);
gln.add(node_4);
gln.add(node_5);
gln.add(node_6);
// 链表的长度为
System.out.println("链表的长度为: "+gln.getLength());
///链表的倒数第三个结点的数据为:
System.out.println("链表的倒数第三个结点的数据为:"+gln.getLastIndexNode(3));
}
}
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)