一【题目类别】
二【题目难度】
三【题目编号】
四【题目描述】
- 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
注意:本题相对原题稍作改动
五【题目示例】
- 示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
六【题目说明】
七【解题思路】
- 定义快慢指针,快指针先走k步,可以想象成为链表的尾结点,这样就和头结点差了k个位置,然后同时向后走,当快指针走到最后一个元素的时候,慢指针和尾结点就差了k个位置,返回当前位置元素值即可
八【时间频度】
九【代码实现】
- Java语言版
package LinkedList;
import java.util.ArrayList;
import java.util.List;
public class I0202_KthNodeFromEndOfListLcc {
int val;
I0202_KthNodeFromEndOfListLcc next;
I0202_KthNodeFromEndOfListLcc(int x) {
val = x;
}
public static void main(String[] args) {
I0202_KthNodeFromEndOfListLcc num1 = new I0202_KthNodeFromEndOfListLcc(1);
I0202_KthNodeFromEndOfListLcc num2 = new I0202_KthNodeFromEndOfListLcc(2);
I0202_KthNodeFromEndOfListLcc num3 = new I0202_KthNodeFromEndOfListLcc(3);
I0202_KthNodeFromEndOfListLcc num4 = new I0202_KthNodeFromEndOfListLcc(4);
I0202_KthNodeFromEndOfListLcc num5 = new I0202_KthNodeFromEndOfListLcc(5);
num1.next = num2;
num2.next = num3;
num3.next = num4;
num4.next = num5;
int res = kthToLast(num1, 2);
System.out.println("res = " + res);
}
public static int kthToLast(I0202_KthNodeFromEndOfListLcc head, int k) {
List<Integer> arr = new ArrayList();
while (head != null) {
arr.add(head.val);
head = head.next;
}
return arr.get(arr.size() - k);
}
}
- C语言版
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct ListNode
{
int val;
struct ListNode *next;
};
int kthToLast(struct ListNode* head, int k)
{
struct ListNode* fast = head;
struct ListNode* slow = head;
while (k > 0)
{
fast = fast->next;
k--;
}
while (fast != NULL)
{
fast = fast->next;
slow = slow->next;
}
return slow->val;
}
int main(void)
{
}
十【提交结果】
- Java语言版
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/34c93a58ce6b7cae1fd696815da6bc9d.png)
- C语言版
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d0b0abbb26e318e0e76dde1492e53928.png)