剑指 Offer 22. 链表中倒数第k个节点
Posted 后端小知识
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 22. 链表中倒数第k个节点相关的知识,希望对你有一定的参考价值。
⭐简单说两句⭐
CSDN个人主页:后端小知识
🔎GZH:
后端小知识
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
题目: 剑指 Offer 22. 链表中倒数第k个节点 ,我们今天来看一道easy的题目吧,这是选自剑指Offer上的一道题,好了,我们一起来看看题意吧:
考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目链接放下面!
- 题目传送门:
思路
:
朴素版:
我们可以先直接遍历链表,获取总长度,记为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;
;
小总结:这道题整体来看还是很简单的,优化版的这种思路也是很容易理解的,虽然不容易想到😂
结语
谢谢你的阅读
,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!
💬
CSDN个人主页:后端小知识
🔎GZH:后端小知识
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
以上是关于剑指 Offer 22. 链表中倒数第k个节点的主要内容,如果未能解决你的问题,请参考以下文章