用C语言建立一个包括头结点和n个结点的单链表,实现单链表插入、删除的基本操作
时间: 2024-11-17 10:28:30 浏览: 9
链表-使用C语言实现带头结点的单链表.zip
在C语言中,我们可以使用结构体(struct)来创建链表,并提供插入和删除元素的功能。首先,我们需要定义一个`Node`结构体作为链表节点,包含数据域和指向下一个节点的指针:
```c
// 定义链表节点结构
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
```
接下来,我们创建一个头结点(head),并实现插入和删除的操作:
1. **插入操作**:
- `insertAtBegin`: 在链表头部插入新节点
```c
void insertAtBegin(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
```
- `insertAfterNode`: 在给定节点之后插入新节点
```c
void insertAfterNode(Node* prevNode, Node** head, int value) {
if (!prevNode || !*head) {
printf("Invalid input.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = prevNode->next;
prevNode->next = newNode;
}
```
2. **删除操作**:
- `deleteNode`: 删除指定值的第一个匹配项
```c
void deleteNode(Node** head, int value) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
Node* temp = *head;
while (temp != NULL && temp->data != value) {
temp = temp->next;
}
if (temp == NULL) {
printf("Value not found in the list.\n");
return;
}
Node* nextTemp = temp->next;
free(temp);
*head = nextTemp;
}
```
注意:这里假设已经处理了内存分配失败的情况。实际应用中,你应该添加错误处理代码。
阅读全文