算法之倒数第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 };
主要为了自己学习