C语言链表删除写入文件里
时间: 2023-10-29 14:25:21 浏览: 74
删除链表节点并将链表重新写入文件的过程大致如下:
1. 打开文件,将链表读入内存。
2. 遍历链表,找到需要删除的节点,并删除它。
3. 关闭文件,重新打开文件并以写模式打开。
4. 将新的链表写入文件。
5. 关闭文件。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 从文件中读取链表
Node *read_list_from_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error: cannot open file %s\n", filename);
return NULL;
}
Node *head = NULL;
Node *tail = NULL;
int data;
while (fscanf(fp, "%d", &data) == 1) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
fclose(fp);
return head;
}
// 将链表写入文件
void write_list_to_file(char *filename, Node *head) {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("Error: cannot open file %s\n", filename);
return;
}
Node *node = head;
while (node != NULL) {
fprintf(fp, "%d\n", node->data);
node = node->next;
}
fclose(fp);
}
// 删除链表节点
void delete_node(Node **head, int data) {
Node *prev = NULL;
Node *curr = *head;
while (curr != NULL) {
if (curr->data == data) {
if (prev == NULL) {
*head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
return;
}
prev = curr;
curr = curr->next;
}
}
int main() {
char *filename = "list.txt";
// 从文件中读取链表
Node *head = read_list_from_file(filename);
// 删除节点
delete_node(&head, 3);
// 将链表写入文件
write_list_to_file(filename, head);
// 释放链表内存
Node *node = head;
while (node != NULL) {
Node *tmp = node;
node = node->next;
free(tmp);
}
return 0;
}
```
在该示例代码中,`read_list_from_file` 函数用于读取文件并构建链表,`write_list_to_file` 函数用于将链表写入文件,`delete_node` 函数用于删除链表中指定的节点。在 `main` 函数中,我们先读取链表,然后删除链表中的一个节点,最后将新的链表写入文件。注意,我们在删除节点后,需要释放该节点所占用的内存。