题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路
- 可以先扫描一遍算出链表的长度,再计算需要从头指针走多少步;
- 使用两个指针,A和B相距k个节点,当B走到链表尾部时,A所在的位置刚好是要求的节点。
思路2的实现如下:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (pListHead == NULL || k == 0)
return NULL;
ListNode *head = pListHead, *tail = pListHead;
for (unsigned int i = 1; i < k; ++i) {
if (tail->next == NULL)
return NULL;
tail = tail->next;
}
while (tail->next != NULL) {
tail = tail->next;
head = head->next;
}
return head;
}
};