数据结构试编写在带头节点的单链表中删除第一个最小值的节点的高效算法
时间: 2024-05-11 12:14:06 浏览: 71
1. 定义指针p指向头结点的下一个节点,定义指针pre指向头结点。
2. 定义变量min记录最小值,将其初始化为p所指节点的数据。
3. 遍历链表,如果p所指节点的数据小于min,则更新min的值,同时记录p所指节点的前驱节点为pre。
4. 遍历完链表后,如果min的值没有变化,则说明链表中没有节点,直接返回。
5. 否则,将pre的next指针指向p所指节点的next指针,即删除p所指节点。
6. 释放p所指节点的内存空间。
7. 返回删除节点的数据值。
代码实现:
```
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode, *LinkedList;
int deleteMin(LinkedList L) {
if (L == NULL || L->next == NULL) {
printf("链表为空\n");
return -1;
}
ListNode *p = L->next, *pre = L;
int min = p->data;
while (p != NULL) {
if (p->data < min) {
min = p->data;
pre = pre->next;
}
p = p->next;
}
if (min == L->next->data) {
printf("链表中没有最小值\n");
return -1;
}
p = pre->next;
pre->next = p->next;
int data = p->data;
free(p);
return data;
}
```
阅读全文