题解 | #输出单向链表中倒数第k个结点#

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

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

#include <stdio.h>
#include <malloc.h>
//链表定义
struct ListNode
{
    int m_nKey;
    struct ListNode* m_pNext;
};

struct ListNode * creatList(struct ListNode* head,int count){
    int val=0;
    if(count==0){
        return NULL;
    }
    //构建链表头
    head=(struct ListNode*)malloc(sizeof(struct ListNode)*1);
        head->m_pNext=NULL;
    //保存头结点
    struct ListNode* p=head;
    scanf("%d",&val);p->m_nKey=val;
    struct ListNode* new=NULL;
    struct ListNode* pre=head;
    //循环建立链表
    while(count-1){
        scanf("%d",&val);
        new=(struct ListNode*)malloc(sizeof(struct ListNode)*1);
        new->m_pNext=NULL;
        new->m_nKey=val;
        p->m_pNext=new;
        p=p->m_pNext;
        count--;
    }
    return head;
}

struct ListNode * searchK(struct ListNode* head,int k){
    struct ListNode * p=head;
    struct ListNode * pre=head;
    //从头开始遍历,先遍历k个节点
    p=head;//回复起点位置
    while(k&&p){
        p=p->m_pNext;
        k--;
    }
    //如果k不等于0,直接返回
    if(k!=0){
        return NULL;
    }else{
        //定义一个指针变量开始从头走
        while(p){
            p=p->m_pNext;
            pre=pre->m_pNext;
        }
    }
    //最后pre的值就是倒数第k个的值
    return pre;
}
int main() {
    int count=0,val=0,k=0;
    //输入count的值
    while(scanf("%d",&count)!=EOF){
        struct ListNode* head=creatList(head,count);
    //建立链表完成以后输入k
    scanf("%d",&k);
    //找到k
    struct ListNode* s=searchK(head,k);
    if(s!=NULL){
        printf("%d\n",s->m_nKey);
    }   
    }
    
    return 0;
}

#华为笔试#
全部评论

相关推荐

07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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