gpt4 book ai didi

c - 删除链接结构的值

转载 作者:行者123 更新时间:2023-11-30 15:12:35 24 4
gpt4 key购买 nike

如果找到的话,函数必须在删除链表的请求值后返回链表的地址,否则返回 NULL,函数 search(int input, CellPtr list) 效果很好......程序的实际输出是正确的,直到它到达第二个函数,实际上它不打印任何内容

#include<stdio.h>
#include<stdlib.h>
typedef struct cell *CellPtr;
typedef struct cell {
int contents;
CellPtr next;
} Cell;
int search(int input, CellPtr list);
CellPtr delete_cell(int input, CellPtr list);
int main()
{
CellPtr list;
list = malloc(sizeof(Cell));
list->contents = -2; /*ONLY FOR TESTING*/
list->next = malloc(sizeof(Cell));
list->next->contents = 4;
list->next->next = malloc(sizeof(Cell));
list->next->next->contents = -6;
list->next->next->next = malloc(sizeof(Cell));
list->next->next->next->contents = 100;
printf("search(100, list) = %d\n", search(-6, list));
if (list = delete_cell(-5, list) == NULL)
printf("not found");
return 0;
}

CellPtr delete_cell(int input, CellPtr list)
{
int i, j;
CellPtr p, q, tmp;
if (i = search(input, list) == 0) {
return NULL;
}
p = list;
if (i == 1) {
list = p->next;
free(p);
return list;
}
for (j=1; j<i-1; j++) {
p = p->next; /*to get the address of the cell pointing to wanted cell*/
}
if (p->next->next == NULL) { /*wanted cell is the last one in the list*/
free(p->next);
p->next = NULL;
return list;
}
q = p->next;
while (q->next->next != NULL) { /*q is the address of the cell one before the last cell*/
q = q->next;
}
if ((input * list->contents > 0) && (input * q->next->contents < 0)) {
tmp = list;
list = tmp->next;
tmp->next = p->next->next;
free(p->next);
p->next = tmp;
return list;
}
if ((input * list->contents <0) && (input * q->next->contents > 0)) {
q->next->next = p->next->next;
free(p->next);
p->next = q->next;
q->next = NULL;
return list;
}
if ((input * list->contents >0) && (input * q->next->contents > 0)) {
q->next->next = p->next->next;
free(p->next);
p->next = q->next;
q->next = NULL;
return list;
}
if ((input * list->contents <0) && (input * q->next->contents < 0)) {
return NULL;
}
}

最佳答案

在这里,当您初始化最后一个元素时:

list->next->next->next = malloc(sizeof(Cell));

你错过了将其next初始化为NULL。您必须添加:

list->next->next->next->next = NULL;

否则,搜索不存在元素的函数(如delete_cell(-5, list))将取消引用未初始化的指针,并且程序可能会崩溃(未定义的行为)。

关于c - 删除链接结构的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970457/

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