用c语言实现带头结点的单链表的插入与删除操作实现。
时间: 2024-09-27 11:11:27 浏览: 37
带头结点单链表基本操作.doc
在 C 语言中,我们可以使用结构体和指针来实现带头结点的单链表。这里我会简单解释如何实现插入和删除操作:
首先,我们需要定义一个链表节点的结构体(包含数据域和指向下一个节点的指针):
```c
typedef struct ListNode {
int data; // 节点存储的数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
```
### 插入操作:
1. **在头部插入**:创建一个新的节点并将其 `next` 指针设置为当前头节点,然后更新头节点的 `next` 为新节点。
```c
void insertAtHead(ListNode** head, int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
```
2. **在尾部插入**:从头开始遍历链表,在找到最后一个节点之后插入新节点。
```c
void insertAtTail(ListNode** head, int value) {
if (*head == NULL) { // 如果链表为空,直接在头插入
insertAtHead(head, value);
return;
}
ListNode* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = (ListNode*)malloc(sizeof(ListNode));
temp->next->data = value;
temp->next->next = NULL;
}
```
### 删除操作:
1. **删除指定值的节点**:需要有两个指针分别指向当前节点和前一个节点,如果当前节点值匹配,则删除它并调整前一个节点的 `next`。
```c
void deleteNode(ListNode** head, int value) {
if (*head == NULL) return;
if ((*head)->data == value) {
ListNode* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
ListNode* prev = *head;
ListNode* curr = (*head)->next;
while (curr != NULL && curr->data != value) {
prev = curr;
curr = curr->next;
}
if (curr == NULL) return; // 没有找到对应节点
prev->next = curr->next;
free(curr); // 释放已删除节点
}
```
阅读全文