You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链表尾部插入节点代码排查请求 - HackerRank数据结构问题

排查链表尾部插入代码的潜在问题

嘿,我来帮你捋捋这段代码可能出问题的地方——逻辑整体是对的,但几个月前能通过现在不行,大概率是HackerRank更新了测试用例,覆盖了之前没触发的边界情况,或者代码里藏着之前没暴露的小隐患:

1. 未处理内存分配失败的情况

你直接用malloc创建新节点,但完全没检查返回值。如果系统内存不足,malloc会返回NULL,这时候你再去给new_node->data和new_node->next赋值,直接就会触发空指针访问错误,严格的测试用例肯定会判失败。可以补上检查逻辑:

struct Node *new_node = (struct Node*)malloc(sizeof(struct Node));
// 新增malloc失败的判断
if (new_node == NULL) {
    // 这里可以根据题目要求返回原head,或者做错误处理
    return head;
}
new_node->data = data;
new_node->next = NULL;

2. 类型别名的兼容性问题

你函数签名用的是Node* Insert(Node *head,int data),但内部定义指针时用的是struct Node *ptr。如果题目里的节点定义没有提前用typedef把struct Node别名为Node,比如节点定义是这样的:

struct Node {
    int data;
    struct Node* next;
};

那有些编译器会认不出Node*这个类型,会抛出编译警告甚至错误。解决办法是要么统一用struct Node*写整个函数,要么在代码开头加上typedef struct Node Node;(如果题目允许的话)。

3. 测试用例的特殊场景触发

比如连续插入大量节点,或者测试用例现在会严格检查尾节点的next是否为NULL?你的代码里new_node->next=NULL是没问题的,空链表插入第一个节点的逻辑也正确。但如果测试用例新增了内存分配失败的场景测试,那第一个问题就是导致失败的核心原因。

先试试加上malloc的失败检查,再确认类型定义的一致性,应该就能解决啦~

内容的提问来源于stack exchange,提问作者momo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:21:51