华为机试-输出单向链表中倒数第k个结点(较难)

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

http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

题目描述

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

方法1:

偷懒,vector也可以通过

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int num;
    while(cin>>num){
        vector<int> temp;
        for(int i=0;i<num;i++){
            int a;cin>>a;
            temp.push_back(a);
        }
        int k;
        cin>>k;
        cout<<temp[num-k]<<endl;
    }

}

方法2:

自己写链表,是顺序尾插入的。然后输出第 num-k 个数字。
注意判断目标位置k是否超过num或者<=0(!!!!!!!!!!!)

#include<iostream>
#include<list>
struct ListNode
{
    int m_nKey;
    ListNode* m_pNext;
    ListNode(int x):m_nKey(x),m_pNext(nullptr){};//记住写法
};
using namespace std;
int main(){
    int num;
    while(cin>>num){
        ListNode* head=new ListNode(-1);
        ListNode* p=head;
        for(int i=0;i<num;i++){
            int a;cin>>a;
            ListNode* q=new ListNode(a);
            q->m_pNext=nullptr;
            p->m_pNext=q;
            p=q;
        }
        int k;cin>>k;
        if(k<=0||k>num) {cout<<0<<endl;continue;}//注意判断为0和超界的情况,否则报段错误
        for(int i=0;i<num-k+1;i++){
            head=head->m_pNext;
        }
        cout<<head->m_nKey<<endl;
    }

}
全部评论

相关推荐

点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
评论
13
8
分享
牛客网
牛客企业服务