剑指offer 21. 链表中倒数第k个节点

简介: 剑指offer 21. 链表中倒数第k个节点

题目描述

输入一个链表,输出该链表中倒数第 k 个结点。

注意:

  • k >= 1;
  • 如果 k 大于链表长度,则返回 NULL;


数据范围

链表长度 [0,30]。

样例

输入:链表:1->2->3->4->5 ,k=2
输出:4


方法一:链表 O(n)


思路,我们拿样例 1->2->3->4->5k = 2 来举例:

  1. 先遍历一遍链表得到链表长度 nn = 5
  2. 然后得到倒数第 k 个结点的位置是链表正数第 n - k + 1 个结点,即 5 - 2 + 1 = 4 ,也就是最终返回第四个结点 4
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* findKthToTail(ListNode* pListHead, int k) {
        int n = 0;
        for (ListNode* p = pListHead; p; p = p->next)    n++;
        if (k > n)  return NULL;
        ListNode* q = pListHead;
        for (int i = 0; i < n - k; i++)   q = q->next;
        return q;
    }
};


欢迎大家在评论区交流~

目录
相关文章
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
|
16小时前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
8 1
|
16小时前
|
存储 Java C语言
剑指offer(牛客)——从尾到头打印链表
剑指offer(牛客)——从尾到头打印链表
10 1
|
16小时前
|
存储 Java
高效删除链表倒数节点最优实现
要删除链表的倒数第 n 个节点,并返回链表的头节点,我们可以使用一趟扫描的方法来实现。这个方法涉及使用两个指针:快指针和慢指针。
|
16小时前
19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点
|
16小时前
|
存储
三种方法实现获取链表中的倒数第n个元素
三种方法实现获取链表中的倒数第n个元素
15 0
|
16小时前
【力扣】19. 删除链表的倒数第 N 个结点
【力扣】19. 删除链表的倒数第 N 个结点
|
16小时前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
16小时前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
|
16小时前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解