剑指 Offer 22. 链表中倒数第k个节点

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

题目: 剑指 Offer 22. 链表中倒数第k个节点 ,我们今天来看一道easy的题目吧,这是选自剑指Offer上的一道题,好了,我们一起来看看题意吧:

考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目链接放下面!

  1. 题目传送门:

剑指 Offer 22. 链表中倒数第k个节点

思路:

朴素版:

我们可以先直接遍历链表,获取总长度,记为len, 那么在从头开始遍历 len-k次,下一个节点就是答案

优化版:

我们其实也可以采用双指针的方式来操作(相当之科学)😉

前指针先往前走k下,然后前指针走一步,后指针就走一步(第一步是从头结点开始的),当前指针指向NULL的时候,这时后指针也就刚刚好到了倒数第k个节点的位置

我们来看看成功AC的代码吧:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* getKthFromEnd(ListNode* head, int k) {
        //p1为前指针,p2为后指针
        ListNode* p1=head;
        ListNode* p2=head;
        //p1指针先走k步
        for(int i=0;i<k;i++) p1=p1->next;
        //p1不为空时,p1走一步,p2走一步,p1为空时,p2这是就是结果
        while(p1!=NULL){
            p1=p1->next;
            p2=p2->next;
        }
        return p2;
    }
};

小总结:这道题整体来看还是很简单的,优化版的这种思路也是很容易理解的,虽然不容易想到😂

结语


相关文章
|
2月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
79 1
|
2月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
28 0
LeetCode第二十四题(两两交换链表中的节点)
|
2月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
47 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
2月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
56 0
|
7月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
6月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
6月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
6月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
66 2
|
7月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
70 1
|
6月前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表

热门文章

最新文章