『自讨苦吃的写法』题解 | #输出单向链表中倒数第k个结点#

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

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

#include<bits/stdc++.h>
using namespace std;


struct ListNode
{
    int           m_nKey;
    ListNode*     m_pNext;
    ListNode(int val): m_nKey(val),m_pNext(nullptr){ }; 
};

//最简单的接口,但是不符合题意
//int solve(int n, int array[], int k );

ListNode * CreateList( int array[], int n )
{
    if( 0==n )
    {
        return nullptr;
    }
    ListNode * head=new ListNode(array[0] );
    ListNode * cur=head;
    for(int i=1; i<n; ++i)
    {
        ListNode * temp=new ListNode( array[i] );
        cur->m_pNext=temp;
        cur=cur->m_pNext;
    }
    return head;
}

int solve( ListNode * head , int k)
{
    ListNode * temp=head;
    int len=0;
    while( nullptr!=temp )
    {
        ++len;
        temp=temp->m_pNext;
    }
    //cout<<"len="<<len<<endl;
    int loop;
    if( k>len )
    {
        return -1;//表示不存在
    }
    else
    {
        loop=len-k-1;
    }

    while( loop-- )
    {
        head=head->m_pNext;
    }
    return head->m_pNext->m_nKey;
}

int main()
{

    int n,k;
    while( ~scanf("%d",&n ) )
    {
        int array[n];
        for(int i=0; i<n; ++i)
        {
            scanf("%d",&array[i] );
        }
        scanf("%d",&k);
        ListNode * head=CreateList( array , n);
        if( 0==k )//特判
        {
            printf("0\n");
        }
        else
        {
            printf("%d\n", solve(head,k) );
        }

    }
            return 0;
}
全部评论

相关推荐

dachang盒子:26届秋招必须有实习经历,建议找个实习过度下,同时项目重复率也比较高没有什么难点亮点,我这里有大厂真实的项目可以提供给你学习也可以给你包装大厂实习来提高你的竞争力,感兴趣的话可以私信我或者点我主页简介
你已经投递多少份简历了
点赞 评论 收藏
分享
合适才能收到offe...:项目岗是什么岗?我看你有段好像跟策划运营相关,如果找运营的话第三段经历写详细点儿。 个人建议是把自我评价删了换成专业技能放在工作经验上或者下面。学生会那个也可以删,把第一个包装成店铺运营,写4-6给点。第三个也是写4-6个点。注意工作内容➕部分数据。 投递的时候BOS招呼用语改一下,换成我有xx工作经验,熟练掌握xx技能样式,也可以简历截图然后直接发送。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务