剑指offer-06-从尾到头打印链表(新手)(C语言)

C语言实现“从尾到头打印链表”

实现目标:

输入12 13 14

输出14 13 12

实现对输入的倒序输出

代码(编译器:vs2022):

整形输入(非整形同理,只需要将相关Int和%d修改即可)

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
//存放printf(),scanf(),getchar(),ungetc(),stdin
#include <stdlib.h>
//存放malloc()

int main(int argc, char** argv)
{
    int* p;
    //malloc()函数返回到空指针
    p = (int*)malloc(0);
    //强制转换成结构体指针
    int n = 0;
    char ch = 0;
    int i = 0;
    while (scanf("%d", &n))
    {
        *(p + i) = n;
        i++;
        if ((ch = getchar()) == '\n')
        //判断是否结束
            break;
        //ungetc(ch,stdin);
    }
    i--;
    //因为在退出循环时对i又一次进行++,所以这里需要--,以使得i的下标对应最后一个元素
    for (; i >= 0; i--)
        printf("%d\t",*(p + i));
    return 0;
}

其他问题:

1、#define _CRT_SECURE_NO_WARNINGS

这是因为在vs2022中一些原本C语言的函数例如scanf()会被任务存在风险,在最开始加人该语句使得程序得以运行,当然,如果不加这句话也可以运行,可以使用自带的函数,例如scanf_s(),这种写法可以保证在该编译器中得以无风险运行,但是相同代码无法保证在其他编译器中运行。

另外,不止vs2022,其他的编译器可能也存在相关问题
2、malloc()

因为不确定输入的个数,所以这里使用malloc()函数是为了减少空间浪费,内部输入多少都行

3、ungetc()函数

这里因为输入的是整形,而scanf()函数在接受整形时会自动跳过非1个(是1个!1个!!)非整形字符(除了空格’ ‘可以全部忽略),所以不需要使用ungetc()函数,如果是字符char类型,使用该函数可以实现输入abc依旧可以得到输出,而不限于a b c

瑕疵:

1、无法同时实现任意类型的倒序

2、无法不同类型混合使用

#C语言#
全部评论
这个题我也刷到过
点赞 回复 分享
发布于 2022-10-01 22:06 山西

相关推荐

ResourceUt...:楼主有自己的垃圾箱,公司也有自己的人才库
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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