题目描述
输入一个链表,输出该链表中倒数第k个结点。
注意:
k >= 0;
如果k大于链表长度,则返回 NULL;
样例
输入:链表:1->2->3->4->5 ,k=2
输出:4
算法1
除开大佬说的遍历链表两次 也可以开一个数组记录链表的元素地址 然后返回倒数第K个
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* findKthToTail(ListNode* pListHead, int k) {
vector<ListNode*> v;
ListNode* p = pListHead;
if(pListHead == NULL)
return NULL;
while(p != NULL){
v.push_back(p);
p = p->next;
}
if(k > v.size())
return NULL;
int idx = v.size();
return v[idx-k];
}
};
正统做法
倒数第K个节点 也可以这么理解
双指针l和r 两者间隔k ,同时移动,当r到达末尾
l指向的节点就是答案
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
ListNode* p = head;
for(int i = 0; i < k;i++){
p = p->next;
}
ListNode* ans =head;
while(p!=NULL){
p=p->next;
ans = ans->next;
}
return ans;
}
};