题目描述
输入一个链表,输出该链表中倒数第k个结点。
python实现:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
# write code here
res = []
while head != None:
res.append(head)
head = head.next
if k > len(res) or k == 0:
return None
return res[-k]
C++实现:
思路:利用前后指针。先让某个指针往后指k个结点,然后在一起移动,当后指针为空的话,前指针指向的结点即题目所求。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode *phead, *phail;
phead = pListHead;
phail = pListHead;
unsigned int count = 0;
while(pListHead)
{
count = count + 1;
pListHead = (*pListHead).next;
}
if((count == 0) || (count < k))
return NULL;
for(unsigned int i = 0; i < k; i ++)
{
phail = (*phail).next;
}
while(phail)
{
phail = (*phail).next;
phead = (*phead).next;
}
return phead;
}
};