分享

华为机试HJ51:输出单向链表中倒数第k个结点

 翟天保的图书馆 2022-01-13

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

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

链表结点定义如下:

struct ListNode
{
    int m_nKey;
    ListNode* m_pNext;
};

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

本题有多组样例输入。

输入描述:

输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值

输出描述:

输出一个整数

示例:

输入:

8
1 2 3 4 5 6 7 8
4

输出:

5

解题思路:

这道题偷懒可以用vector数组做,非常简单。

采用题目要求的链表来做:定义ListNode的构造函数,输入链表长度;设置好表头,每次输入数值就new一个节点并连接;输入target,即倒数第target个节点,遍历链表number-target次,即可让指针指向目标节点,输出该节点的值即可。

测试代码:

#include <iostream>
#include <vector>

using namespace std;

struct ListNode
{
    int m_nKey;
    ListNode* m_pNext;
    // 构造函数
    ListNode(int x):m_nKey(x),m_pNext(nullptr){};
};

int main()
{
    int number;
    while(cin>>number)
    {
        ListNode* head=new ListNode(-1);
        ListNode* p=head;
        for(int i=0;i<number;++i)
        {
            int t;
            cin>>t;
            ListNode* tp=new ListNode(t);
            tp->m_pNext=nullptr;
            p->m_pNext=tp;
            p=tp;
        }
        int target;
        cin>>target;
        if(target<=0||target>number)
        {
            cout<<0<<endl;
            continue;
        }
        for(int i=0;i<number-target+1;++i)
        {
            head=head->m_pNext;
        }
        cout<<head->m_nKey<<endl;
    }
    return 0;
}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多