输出单向链表中倒数第k个结点

输出单向链表中倒数第k个结点

问题描述:

输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。

链表结点定义如下:

struct ListNode

{

int m_nKey;

ListNode* m_pNext;

};

正常返回倒数第k个结点指针,异常返回空指针

数据范围:链表长度满足 , ,链表中数据满足

本题有多组样例输入。

img


//调试时,显示数组越界等问题,原因是该题倒数第0个结点比较扯,给出结果为0,题意并未提示 
#include<iostream>
using namespace std;
struct ListNode{
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(NULL){}
};
int main(){
    int nums;
    while(cin >> nums){
        ListNode *pHead = new ListNode(-1);
        ListNode *p = pHead;
        for(int i = 0; i < nums; ++i){
            int data;
            cin >> data;
            ListNode *q = new ListNode(data);
            p->next = q;
            p = p->next;
        }
        int Kth;
        cin >> Kth;
        p = pHead;
        if(Kth == 0)  // 边界测试
            cout << "0" << endl;
        else if(nums-Kth >= 0){
            for(int i = 0; i <= nums-Kth; ++i)
                p = p->next;
            cout << p->val << endl; 
        }
        else
            cout << "NULL" << endl; 
    }
    return 0;
}