gpt4 book ai didi

c - 尝试将节点添加到链表中

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:17 24 4
gpt4 key购买 nike

我一直在尝试将新节点添加到个人资料链接列表中(例如 facebook 个人资料),但在启动时出现运行时错误。这是我得到的:

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

typedef struct friend {
char *name;
int age;
char gender;
struct friend* next;
} friend;

void node_add(friend* new);

int main(int argc, char *argv[]) {
friend amit;
friend *new;

amit.name = "amit";
amit.age = 16;
amit.gender = 'm';

node_add(new);
new->name = "amit";

printf ("name: %s\n", new->name);
system("PAUSE");

return 0;
}

void node_add(friend* new) {
new = (friend* )malloc(sizeof(friend));
friend* head = new;
new -> next = head;
}

我现在正在尝试创建一个删除节点函数。我试图找到用户要删除哪个节点,然后通过执行删除它

delete -> next = delete -> next -> next

问题是,我需要获取列表中的第一个节点。这是我写的:

void node_delete(friend* delete) {
friend *temp;
char name[256];
int i = 0, j = 0;

printf ("Please enter the friend's name you want to delete: \n");
fgets (name, 256, stdin);
fgets (name, 256, stdin);

while (0 == (strcmp(temp -> next -> name, delete -> next -> name))) {
temp = friend -> next;
}
temp -> next = temp -> next -> next;
free (delete);
}

最佳答案

编辑:

看来我的测试有点太快了,因为这段代码实际上有一个相当严重的问题,但它很微妙:

main() 中,你实际上从来没有指向任何东西。它只是一个指向内存空间的乱码指针,有时可能会起作用,但在大多数情况下,非常糟糕。

friend *new; // here's your problem; change this to:
friend *new = malloc(sizeof(friend));

此外,永远不要强制转换 malloc 的结果。

重新编辑:

一个非常简单的链表实现可能看起来如何:

typedef struct _node node;
struct _node {
void *payload;
node *next;
};

node *create_node () {
node *retval = malloc(sizeof(node));

retval->payload = NULL;
retval->next = NULL;

return retval;
}

node *add_node (node *target) {
if (target->next)
return;

node *next = create_node();
node->next = next;
}

node *node_search (node *haystack, void *needle) {
while (haystack) {
if (!compare(needle, haystack->payload)) {
return haystack;
} else {
haystack = haystack->next;
}
}

return NULL;
}

删除和插入的实现留给读者作为练习。

关于c - 尝试将节点添加到链表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com