剑指offer-24-反转链表(新手)(C语言)

C语言实现“反转列表”

实现目标:
输入:
1 2 3 4 5
输出:
5 4 3 2 1
其中包含整个数组的内容反转,然后输出

代码(编译器vs2022)
整形输入(非整形同理,只需将相关的int和%d修改即可)

#define _CRT_SECURE_NO_WARNINGS

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

int main(int argc, char** argv)
{
    int* p;
    p = (int*)malloc(0);
    int n = 0;
    //存储当前指向的元素
    int i = 0;
    //存储元素个数
    while (scanf("%d", &n))
    {
        *(p + i) = n;
        i++;
        char ch = 0;
        if ((ch = getchar()) == '\n')
            break;
    }
    //交换
    for (int j = 0; j < i / 2; j++)
    //比较一半的次数,提高效率
    {
        *(p + j) ^= *(p + i - j - 1);
        *(p + i - j - 1) ^= *(p + j);
        *(p + j) ^= *(p + i - j - 1);
    }
    for (int j = 0; j < i; j++)
        printf("%d ", *(p + j));
    printf("\n");
    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语言##剑指offer#
全部评论
分享的东西很棒,缺失值得赞扬
点赞 回复 分享
发布于 2022-10-07 16:54 广东

相关推荐

不愿透露姓名的神秘牛友
03-08 19:53
已编辑
AAA不喝拿铁:海投吧,感觉项目写的可以了,能cover住提问就行。我根据真实面经整理得到的最全(高/中/低频)面试题,适合面试前短期突击&长期提高补充,需要的牛u可以关注一手我的专栏,祝好运
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客企业服务