gpt4 book ai didi

c - c中的单链表

转载 作者:行者123 更新时间:2023-11-30 17:50:10 25 4
gpt4 key购买 nike

下面是我在 c 中的单链表代码。谁能帮我解决这个问题吗?

这是我的主 c 文件:

#include <stdio.h>
#include <stdlib.h>
#include "myclib.c"


struct mydata
{
int num;
char name;
struct mydata *next;
};

int main()
{
struct mydata *head, *newnode, *temp;

head = (struct mydata*)malloc(sizeof(struct mydata));
newnode = (struct mydata*)malloc(sizeof(struct mydata));
temp = (struct mydata*)malloc(sizeof(struct mydata));

head -> num = 123;
head -> name = 'k';
head -> next = NULL;

newnode -> num = 456;
newnode -> name = 'd';
newnode -> next = NULL;

printf("before.app.head = %p\n",head);
printf("before.app.newnode = %p\n",newnode);
printf("before.app.head->next = %p\n",head -> next);
printf("before.app.newnode->next = %p\n",newnode -> next);

head = (struct mydata*)addNodeAtHead(head, newnode, (newnode -> next));

printf("after.app.head = %p\n",head);
printf("after.app.newnode = %p\n",newnode);
printf("after.app.head->next = %p\n",head -> next);
printf("after.app.node->next = %p\n",newnode -> next);

temp = head;

while(temp != NULL)
{
printf("num : %d\n",temp -> num);
printf("name : %c\n",temp -> name);
temp = temp -> next;
}

free(temp);
free(head);

return 0;
}

这是 myclib.c 文件:

#include <stdio.h>


void * addNodeAtHead(void *head, void *node, void *nodenext)
{
printf("\nbefore.head = %p\n",head);
printf("before.node = %p\n",node);
printf("before.nodenext = %p\n",nodenext);
nodenext = head;
head = node;
printf("after.head = %p\n",head);
printf("after.node = %p\n",node);
printf("after.nodenext = %p\n\n",nodenext);

return head;

}

我正在尝试在 head 前面添加 newnode,而不是将头指针更改为 newnode。

最佳答案

#include <stdio.h>
#include <stdlib.h>
//#include "myclib.c"

struct mydata
{
int num;
char name;
struct mydata *next;
};

struct mydata* addNodeAtHead(struct mydata* head, struct mydata* node)
{
#ifdef DEBUG
printf("\nbefore.head = %p\n",head);
printf("before.node = %p\n",node);
// printf("before.nodenext = %p\n",nodenext);
#endif
if(node){
node->next = head;
head = node;
}
#ifdef DEBUG
printf("after.head = %p\n",head);
printf("after.node = %p\n",node);
// printf("after.nodenext = %p\n\n",nodenext);
#endif

return head;

}

int main()
{
struct mydata *head, *newnode, *temp;

head = (struct mydata*)malloc(sizeof(struct mydata));
newnode = (struct mydata*)malloc(sizeof(struct mydata));
//temp = (struct mydata*)malloc(sizeof(struct mydata));//unused and rewrite to other pointer

head -> num = 123;
head -> name = 'k';
head -> next = NULL;

newnode -> num = 456;
newnode -> name = 'd';
newnode -> next = NULL;

#ifdef DEBUG
printf("before.app.head = %p\n",head);
printf("before.app.newnode = %p\n",newnode);
printf("before.app.head->next = %p\n",head -> next);
printf("before.app.newnode->next = %p\n",newnode -> next);
#endif

head = (struct mydata*)addNodeAtHead(head, newnode);

#ifdef DEBUG
printf("after.app.head = %p\n",head);
printf("after.app.newnode = %p\n",newnode);
printf("after.app.head->next = %p\n",head -> next);
printf("after.app.node->next = %p\n",newnode -> next);
#endif

temp = head;

while(temp != NULL)
{
printf("num : %d\n",temp -> num);
printf("name : %c\n",temp -> name);
temp = temp -> next;
}
/*
free(temp);//NULL
free(newnode);//...
free(head);//already changed
*/
temp=head;
while(temp != NULL){
struct mydata *prev = temp;
temp=temp->next;
free(prev);
}
return 0;
}

关于c - c中的单链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17425942/

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