算法之倒数第k个节点

 

分析和思路:双指针,第一个指针先遍历k个节点,然后第二个指针从头结点开始遍历,当第1个指针遍历到尾结点时,第二个指针所在的节点就是倒数第k个节点,注意呀考虑k超出个数大小情况。

 

 1 /**
 2  * struct ListNode {
 3  *    int val;
 4  *    struct ListNode *next;
 5  *    ListNode(int x) : val(x), next(nullptr) {}
 6  * };
 7  */
 8 class Solution {
 9 public:
10     /**
11      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
12      *
13      * 
14      * @param pHead ListNode类 
15      * @param k int整型 
16      * @return ListNode类
17      */
18     
19 
20         ListNode* FindKthToTail(ListNode* pHead, int k) {
21             /*        
22 
23             int count=0;
24             map<int,ListNode*> mListNodeValue;
25             // write code here
26             if(pHead==NULL)
27             {
28                 return NULL;
29             }
30             ListNode* q=pHead;
31             while(q!=NULL)
32             {
33                 mListNodeValue[count++]=q;
34 
35                 q=q->next;
36             }
37             if(k>count)
38             {
39                 return NULL;
40             }
41             return mListNodeValue[count-k];
42              */   
43 
44 
45 
46             ListNode* p;
47             ListNode* q;       
48             p=pHead;
49             q=pHead;
50             if(pHead==NULL)
51             {
52                 return NULL;
53             }
54 
55             for(int i=0;i<k;i++)
56             {
57                if(p==NULL)
58                 {
59                     return NULL;
60                 }
61                 p=p->next;
62              
63             }
64 
65             while(p!=NULL&&q!=NULL)
66             {
67                 p=p->next;
68                 q=q->next;
69             }
70             return q;      
71     }
72 };

 

posted @ 2022-02-12 09:48  技术笔记记录  阅读(49)  评论(0)    收藏  举报