编写从无序的整数链表中找出值最小的结点,然后将它从链表中删去的程序。c语言题
时间: 2024-02-05 18:12:58 浏览: 164
用C++编程实现链表删除某结点
5星 · 资源好评率100%
以下是一个可能的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点
struct Node {
int val;
struct Node* next;
};
// 找到链表中值最小的结点并删除它
void deleteMinNode(struct Node** head) {
if (*head == NULL) { // 空链表
return;
}
// 找到值最小的结点
struct Node* minNode = *head;
struct Node* prev = NULL;
struct Node* curr = *head;
while (curr != NULL) {
if (curr->val < minNode->val) {
minNode = curr;
prev = prev;
}
prev = curr;
curr = curr->next;
}
// 删除最小结点
if (minNode == *head) {
*head = (*head)->next;
} else {
prev->next = minNode->next;
}
free(minNode);
}
int main() {
// 创建一个链表
struct Node* head = NULL;
head = (struct Node*)malloc(sizeof(struct Node));
head->val = 5;
head->next = (struct Node*)malloc(sizeof(struct Node));
head->next->val = 3;
head->next->next = (struct Node*)malloc(sizeof(struct Node));
head->next->next->val = 8;
head->next->next->next = NULL;
// 删除值最小的结点
deleteMinNode(&head);
// 打印链表
struct Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->val);
curr = curr->next;
}
printf("\n");
// 释放链表内存
curr = head;
while (curr != NULL) {
struct Node* temp = curr;
curr = curr->next;
free(temp);
}
return 0;
}
```
这个程序首先定义了链表结点的结构体 `Node`,然后实现了一个函数 `deleteMinNode`,它的参数是指向指针的指针 `head`,即指向链表头指针的指针。该函数会在链表中找到值最小的结点并删除它,最后释放它的内存。注意,因为要修改指针 `head` 的值,所以要传入指向 `head` 的指针的指针。
在 `main` 函数中,我们创建了一个简单的链表,并调用了 `deleteMinNode` 函数来删除值最小的结点。最后,我们打印链表以验证删除操作是否正确,并释放链表内存。
阅读全文