实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
注意:本题相对原题稍作改动
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:给定的 k 保证是有效的。
题意:找到单向链表的倒数第k个节点,返回该节点的值。
思路:我们可以先从头遍历到最后,统计下总共有多少个节点(num),然后我们在遍历一次,这次遍历的次数是(num-k),这样就可以遍历到倒数第k个节点了,返回该节点的值即可。
正确代码:
class Solution {
public int kthToLast(ListNode head, int k) {
int num=1;
ListNode node = head;
while(node.next!=null){
num++;
node =node.next;
}
for(int i=0;i<num-k;i++){
head=head.next;
}
num= head.val;
return num;
}
}
完整代码(含测试代码):
package com.Keafmd.day0103;
/**
* Keafmd
*
* @ClassName: KthNodeFromEndofList
* @Description: 返回倒数第 k 个节点
* @author: 牛哄哄的柯南
* @date: 2021-01-03 19:08
*/
public class KthNodeFromEndofList {
public static void main(String[] args) {
Solution solution = new Solution();
//创建节点
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
//连接成单链表
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=node5;
//用result接收返回值
int result = solution.kthToLast(node1,2);
System.out.println(result);
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Solution {
public int kthToLast(ListNode head, int k) {
int num=1; // 记录节点总数,后面会重复利用num作为返回值,暂存倒数第k个节点的值
//遍历单向链表,统计节点总数
ListNode node = head;
while(node.next!=null){
num++;
node =node.next;
}
//遍历到倒数第k个节点的位置
for(int i=0;i<num-k;i++){
head=head.next;
}
//用num暂存倒数第k个节点的值,此时的head是倒数第个节点
num= head.val;
return num;
}
}
输出结果:
4
Process finished with exit code 0
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
Keafmd