此题出自牛客网的剑指offer专题
题目描述
输入一个链表,输出该链表中倒数第k个结点。
题目分析:
这道题的大概思路还是比较简单的,我们可以先定义两个结点对象p,q来接收函数传进来的链表表头。然后遍历其中的一个结点对象统计出链表总的结点个数。因为k是倒数序号,所以我们应该输出的就是第(count-k)个结点(从第一个开始数)。
代码如下:
Java版本:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null){
return head;
}
ListNode p,q;
p = q = head;
int count = 0;
while(p!=null){
count++;
p = p.next;
}
if(count<k){
return null;
}
for(int i=0;i<count-k;i++){
q = q.next;
}
return q;
}
}
C++版本:
/*
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* p = pListHead;
ListNode* q = pListHead;
int sum = 0;
while(p)
{
sum++;
p = p->next;
}
if(k>sum) return nullptr;
for(int i=0;i<sum-k;i++){
q=q->next;
}
return q;
}
};