题目15:链表中倒数第K个节点(leetcode链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/)
题目分析
方法1:统计链表中节点个数,计算出倒数第K个节点是正数第几个节点,遍历链表找到这个节点。
方法2:维护两个指针prev和curr,curr指向第链表的第K个节点,prev指向链表的头结点。同时移动两个指针,当curr指针指向链表的尾节点时,指针prev指向的就是链表的倒数第K个节点。
代码描述
方法2
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
if(head == NULL || k <= 0)
return NULL;
ListNode* prev = head;
ListNode* curr = head;
//curr走k-1步到达第K个节点
int n = k-1;
while(n)
{
if(curr->next == NULL)
return NULL;
curr = curr->next;
n--;
}
//两个指针同时走
while(curr->next)
{
curr = curr->next;
prev = prev->next;
}
return prev;
}
};