ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面试题22:链表中倒数第k个节点

2019-11-19 20:02:04  阅读:155  来源: 互联网

标签:面试题 ListNode nullptr next 链表 pAhead 倒数第 指针


思路1:

先遍历链表一次,统计出链表节点个数n,

然后,倒数第k个节点是,n-k+1。

缺点:该方法需要遍历两次列表。

 

思路2:

定义两个指针,第一个指针向前遍历k-1步,第二个指针保持不动;

从第k步开始,第二个指针从链表头指针开始遍历,当第一个指针到底链表的尾端,第二个指针正好指向倒数第k个节点。

 

注意点:

1.pListHead为空指针

2.pListHead的链表节点数少于k

3.输入参数为0,由于k是一个无符号整数,k-1会得到0xFFFFFFFF,循环次数超过预计

 

 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6             val(x), next(NULL) {
 7     }
 8 };*/
 9 class Solution {
10 public:
11     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
12     if(pListHead == nullptr || k == 0)
13         return nullptr;
14     ListNode * pAhead = pListHead;
15     ListNode * pBehind = nullptr;
16     
17     for(unsigned int i = 0; i < k-1; i++)
18     {
19         if(pAhead->next != nullptr)
20             pAhead = pAhead->next;
21         else
22         {
23             return nullptr;
24         }
25     }
26         
27     pBehind = pListHead;
28     while(pAhead->next != nullptr)
29     {
30         pAhead = pAhead->next;
31         pBehind = pBehind->next;
32     }
33     return pBehind;
34     }
35 };

 

 

标签:面试题,ListNode,nullptr,next,链表,pAhead,倒数第,指针
来源: https://www.cnblogs.com/zmm1996/p/11891977.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有