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

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

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct list
{
    int val;
    struct list* next;
};

int del_list(struct list *head)
{
    struct list *tmp,*tmp_next;

    if (head->next == NULL) {
        /* 只有头结点 */
        return 0;
    }

    tmp = head->next;
    while (tmp->next != NULL) {
        tmp_next = tmp->next;
        free(tmp);
        tmp = tmp_next;
    }
    free(tmp);

    return 0;
}
int inset_node(struct list *head, struct list *new)
{
    struct list *tmp;
    tmp = head;
    while (tmp->next != NULL) {
        tmp = tmp->next;
    }
    tmp->next = new;
    return 0;
}

int find_node(struct list *head, int pos)
{
    int i;
    struct list *tmp;

    tmp = head->next;
    for (i = 0; i < pos; i++) {
        tmp = tmp->next;
    }
        printf("%d \n", tmp->val);
    return 0;
}

int main() {
    int i, k,tmp_val = 0;
    int cnt = 0;
    struct list head, *new;

    memset(&head, 0, sizeof(struct list));

/* 每个用例 分三次读取,第一次读取总数,第二循环读取节点,第三次读取k值 */
    while (scanf("%d", &cnt) != EOF) { 
        for (i = 0; i < cnt; i++) {
            scanf("%d", &tmp_val);
            /*  */
            new = (struct list *) malloc(sizeof(struct list));
            if (new == NULL) {
                del_list(&head);
                return -4;
            }
            /* 构造新的节点,作为最后一个节点 */
            new->val = tmp_val;
            new->next = NULL;
            inset_node(&head, new);
        }
        /* 输入k值 */
        scanf("%d", &k);
        if (k > cnt) {
            continue;
        }
        /* 计算出节点位置,直接正向查找 */
        find_node(&head, cnt - k );
        /* 别内存泄漏 */
        del_list(&head);
        head.next = NULL;
        
    }

    return 0;
}

全部评论

相关推荐

01-23 14:54
同济大学 Java
热爱敲代码的程序媛:给你提几点【专业技能】这个模块里面可优化的地方:1.【具备JVM调优经验】可以去b站上搜一下JVM调优的视频,估计一两个小时凭你的学习能力就能掌握JVM调优的实践方面的技能。2.【MySql优化】MySql这一栏,你去b站或者找个博客看看MySql优化,学一下,如果你本身比较熟悉MySql语句的话,那基本半天时间凭你的学习能力MySql语句优化方面的技能你也能掌握个差不多。以上1,2两点主要是因为我看你专业技能大部分都说的是偏理论,没有写应用。再就是最后,你结合你的项目,想一想你的项目中哪些sql语句是可以用MySql优化的,到时候你面试的时候也好结合着说一下。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务