链表中倒数第k个结点

Posted 凌晨一点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表中倒数第k个结点相关的知识,希望对你有一定的参考价值。

题目描述

输入一个链表,输出该链表中倒数第k个结点。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x):val(x),next(NULL){}
};

class Solution
{
public:
    ListNode* FindKthToTail(ListNode* pListHead,unsigned int k)
    {
        ListNode* p=pListHead;
        for(int i=0;i<k;i++)  //先让p走k-1个节点,剩下的就是总长-K+1个节点
        {
            if(!p)
            return NULL;
            else
            p=p->next;

        }
        while(p)  //pListNode和p一起走,当p走完剩下的总长-k=+1个节点时,pListNode也走了总长-k+1个节点,刚好走到倒数第k个节点
        {
            p=p->next;
            pListHead=pListHead->next;
        }

        return pListHead;
    }
};
int main()
{
    Solution s;
    int n;
    struct ListNode *head,*p,*key;
    scanf("%d",&n);
    head=(struct ListNode*)malloc(sizeof(struct ListNode));
    p=(struct ListNode*)malloc(sizeof(struct ListNode));
    head->next=p;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&p->val);
        p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
        p=p->next;
    }
    p=head->next;
    /*
    for(int i=0;i<n;i++)
    {
        printf("%d",p->val);
        p=p->next;
    }
    */
    s.FindKthToTail(p,3);
    cout<<key->val<<endl;
}

 

以上是关于链表中倒数第k个结点的主要内容,如果未能解决你的问题,请参考以下文章

剑指 14. 代码的鲁棒性链表中倒数第k个结点

链表中倒数第k个结点

高质量代码-链表中倒数第k个结点

剑指offer:链表中倒数第k个结点

链表中倒数第k个结点-剑指Offer

链表中倒数第k个结点