不带头结点的单链表 L 中删除⼀个最⼩值结点代码
时间: 2024-09-14 07:09:34 浏览: 44
在不带头结点的单链表中删除最小值节点的步骤通常包括以下几个阶段:遍历链表找到最小值节点、找到最小值节点的前驱节点以及最后执行删除操作。以下是一个简单的代码示例,用于说明如何实现这一过程:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
void deleteMinNode(ListNode **head) {
if (head == NULL || *head == NULL) {
return; // 如果链表为空或头指针为空,则直接返回
}
ListNode *current = *head;
ListNode *prev = NULL;
ListNode *minPrev = NULL;
ListNode *minNode = *head;
// 遍历链表寻找最小值节点以及它的前驱节点
while (current->next != NULL) {
if (current->next->val < minNode->val) {
minNode = current->next;
minPrev = current;
}
current = current->next;
}
// 删除最小值节点
if (minPrev != NULL) {
minPrev->next = minNode->next;
} else {
*head = minNode->next; // 如果最小值节点是头节点,则直接更新头指针
}
free(minNode); // 释放最小值节点的内存
}
```
在这段代码中,我们首先定义了单链表节点的结构体`ListNode`,然后编写了`deleteMinNode`函数,该函数接受链表头指针的地址作为参数。函数的逻辑是先找到最小值节点和它的前驱节点,然后根据最小值节点是否是头节点来决定更新头指针或是更新前驱节点的`next`指针,最后释放最小值节点所占用的内存。
阅读全文