gpt4 book ai didi

c - 删除链表后仍在打印

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:24 25 4
gpt4 key购买 nike

我在练习链表:即使在使用 deleteList() 函数删除列表后,我的 printList() 函数仍在打印整个列表,这是我的代码,我的代码有什么问题? delete 函数声明或函数调用是否有问题,我的main()printList() 函数是否有错误?

我搜索了 Internet 并尝试了教程网站上的代码。

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

typedef struct node {
int data;
struct node *next;
} node;

void deleteList(node **head);
void printList(node *head);

int main(void) {
node *prev, *head, *p;
head = NULL;

for (int i = 0; i < 5; i++) {
p = malloc(sizeof(node));
printf("Enter number\n");
scanf("%i", &p->data);
p->next = NULL;
if (head == NULL)
head = p;
else
prev->next = p;
prev = p;
}
deleteList(&head);
printList(head);
free(p);
return 0;
}

void printList(node *head) {
if (head == NULL) {
printf("\nNULL\n");
} else {
printf("\n%i", head->data);
printList(head->next);
}
}

void deleteList(node **head) {
node *cur = *head;
node *nxt;

while (cur != NULL) {
nxt = cur->next;
free(cur);
cur = nxt;
}
*head = NULL;
}

最佳答案

您的代码大部分是正确的:

  • main() 的末尾有一个额外的 free(p); 导致未定义的行为,因为该节点已被 deleteList()
  • 您应该检查 malloc()scanf() 的返回值,以避免在分配内存失败或无法从输入流。

除了这些问题,代码应该总是在释放列表后打印NULL

这是一个改进的版本:

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

typedef struct node {
int data;
struct node *next;
} node;

void deleteList(node **head);
void printList(const node *head);

int main(void) {
node *head = NULL;
node *prev = NULL;

for (int i = 0; i < 5; i++) {
node *p = malloc(sizeof(node));
if (p == NULL)
return 1;
printf("Enter number\n");
if (scanf("%i", &p->data) != 1)
return 1;
p->next = NULL;
if (head == NULL)
head = p;
else
prev->next = p;
prev = p;
}
deleteList(&head);
printList(head);
return 0;
}

void printList(const node *head) {
if (head == NULL) {
printf("NULL\n\n");
} else {
printf("%i\n", head->data);
printList(head->next);
}
}

void deleteList(node **head) {
node *cur = *head;

while (cur != NULL) {
node *nxt = cur->next;
free(cur);
cur = nxt;
}
*head = NULL;
}

关于c - 删除链表后仍在打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46511287/

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