对给定的单链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点,用C语言写
时间: 2024-10-21 17:12:22 浏览: 16
对给定的链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点。删除结点.cpp
在C语言中,我们可以使用迭代的方式来解决这个问题。假设链表节点结构如下:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
```
首先,我们需要找到目标元素x以及它的前一个元素。如果链表头节点就是我们要找的元素,或者找不到该元素,则无需删除。接下来,可以编写如下的函数来完成删除操作:
```c
void deleteNode(ListNode** head, int x) {
// 检查是否为空链表
if (*head == NULL) {
return;
}
// 遍历链表
ListNode* current = *head;
ListNode* prev = NULL;
while (current != NULL && current->val != x) {
// 找到元素x的前一个节点
prev = current;
current = current->next;
}
// 如果找到了目标元素,删除其前一个节点
if (current != NULL) {
if (prev == NULL) { // 如果头节点就是要删除的元素
*head = current->next;
} else {
prev->next = current->next;
}
free(current); // 释放已删除节点的内存
}
}
```
在这个函数里,我们遍历链表,当找到值为x的节点时,记录下它的前一个节点prev,并将prev的next指针指向当前节点的下一个节点,从而实现了删除操作。
阅读全文