当我运行它们时,以下功能之一导致分段错误 . 对他来说,他们看起来应该工作 . 我怀疑它与我使用malloc的方式有关 . 如果有人能指出哪个文件产生错误,我将永远感激不尽 .
这些功能非常自我解释 . 第一个从文件读取和int,并将包含int的节点添加到链表的开头 . 第二个做同样的事情,但将节点添加到最后 . 第三个删除链表中的第三个节点,最后一个删除最后一个节点 .
LinkedList readAndAddToStart(LinkedList list, FILE *inputFile) {
LinkedList head;
head = (LinkedList)malloc(sizeof(LinkedList));
int num;
fscanf(inputFile, "%d", &num);
head->data = num;
head->next = list;
return head;
}
LinkedList readAndAddToEnd(LinkedList list, FILE *inputFile) {
LinkedList addNode;
addNode = (LinkedList)malloc(sizeof(LinkedList));
LinkedList head;
head = list;
int num;
fscanf(inputFile, "%d", &num);
addNode->data = num;
addNode->next = NULL;
while (list->next != NULL) {
list = list->next;
}
list->next = addNode;
return head;
}
LinkedList deleteFirst(LinkedList list) {
LinkedList temp;
temp = list;
if (list != NULL) {
list = list->next;
free(temp);
temp = NULL;
}
return list;
}
LinkedList deleteLast(LinkedList list) {
LinkedList head;
head = list;
if (list != NULL) {
while (list->next->next != NULL) {
list = list->next;
}
free(list->next);
list->next = NULL;
}
return head;
}
我的结构看起来像这个BTW
struct ListNode {
int data;
struct ListNode *next;
};
typedef struct ListNode *LinkedList;
1 回答
如果
list
为空,readAndAddToEnd
将崩溃 . 如果列表只有一个元素,deleteLast
将崩溃 .