C语言实现单向链表的创建及数据的删除
时间: 2024-05-03 20:22:19 浏览: 105
c实现单链表插入和删除
单向链表是一种常用的数据结构,它由多个节点组成,每个节点包含一个数据和一个指向下一个节点的指针。本文将介绍如何使用C语言实现单向链表的创建和数据的删除。
1. 创建单向链表
创建单向链表需要定义一个节点结构体,包含数据成员和指向下一个节点的指针。然后通过循环动态分配节点内存并将节点按顺序连接起来,最后返回链表头节点的指针。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
struct Node* createLinkedList(int n) {
struct Node *head = NULL, *tail = NULL;
int i, data;
for (i = 1; i <= n; i++) {
printf("Enter node %d data: ", i);
scanf("%d", &data);
struct Node *newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
int main() {
int n;
printf("Enter the number of nodes: ");
scanf("%d", &n);
struct Node *head = createLinkedList(n);
return 0;
}
```
在上面的代码中,createLinkedList()函数用于创建单向链表,其中n表示链表的长度。该函数首先定义head和tail指针,分别指向链表的头结点和尾节点。然后循环n次,每次从键盘输入一个数据,动态分配一个新节点内存,并将新节点连接到链表尾部。最后返回头节点的指针。
2. 删除单向链表中的数据
删除单向链表中的数据需要先找到要删除的节点,然后将该节点从链表中断开,并释放节点内存。可以定义一个函数deleteNode()实现这个过程。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
struct Node* createLinkedList(int n) {
struct Node *head = NULL, *tail = NULL;
int i, data;
for (i = 1; i <= n; i++) {
printf("Enter node %d data: ", i);
scanf("%d", &data);
struct Node *newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
void deleteNode(struct Node **head, int key) {
struct Node *prev = NULL, *curr = *head;
while (curr != NULL && curr->data != key) {
prev = curr;
curr = curr->next;
}
if (curr == NULL) {
printf("Node with key %d not found\n", key);
return;
}
if (prev == NULL) {
*head = curr->next;
} else {
prev->next = curr->next;
}
printf("Node with key %d deleted\n", key);
free(curr);
}
int main() {
int n, key;
printf("Enter the number of nodes: ");
scanf("%d", &n);
struct Node *head = createLinkedList(n);
printf("Enter a node key to delete: ");
scanf("%d", &key);
deleteNode(&head, key);
return 0;
}
```
在上面的代码中,deleteNode()函数用于删除单向链表中的数据。该函数首先定义两个指针prev和curr,分别指向当前节点的前一个节点和当前节点。然后循环链表,直到找到要删除的节点或链表遍历完毕。如果找到了要删除的节点,就将该节点从链表中断开,并释放节点内存。如果要删除的节点是头节点,就将head指针指向下一个节点,否则就将前一个节点的next指针指向下一个节点。
总结
本文介绍了如何使用C语言实现单向链表的创建和数据的删除。在实际应用中,单向链表是一种非常常用的数据结构,具有插入和删除节点操作效率高、空间利用率高等优点。因此,熟练掌握单向链表的实现方法对于提高程序员的编程水平和解决实际问题非常有帮助。
阅读全文