从链表当中寻找最小值,删除最小值,再从剩余的值中寻找最小值
时间: 2024-09-24 22:10:00 浏览: 31
可以按照以下步骤实现:
1. 定义一个链表结构体,包含数据和指向下一个节点的指针。
2. 定义一个函数,用于在链表中寻找最小值。遍历链表,记录最小值并返回。
3. 定义一个函数,用于删除链表中的最小值。遍历链表,找到最小值所在的节点,将其从链表中删除。
4. 定义一个函数,用于在剩余的节点中寻找最小值。遍历链表,记录最小值并返回。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 在链表中寻找最小值
int find_min(Node *head) {
int min = head->data;
Node *p = head->next;
while (p != NULL) {
if (p->data < min) {
min = p->data;
}
p = p->next;
}
return min;
}
// 删除链表中的最小值
void delete_min(Node *head) {
Node *p = head->next;
Node *prev = head;
Node *min_node = p;
while (p != NULL) {
if (p->data < min_node->data) {
min_node = p;
prev = head;
} else {
prev = p;
}
p = p->next;
}
prev->next = min_node->next;
free(min_node);
}
// 在剩余的节点中寻找最小值
int find_min_remaining(Node *head) {
int min = head->next->data;
Node *p = head->next->next;
while (p != NULL) {
if (p->data < min) {
min = p->data;
}
p = p->next;
}
return min;
}
int main() {
// 创建链表
Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;
Node *p = head;
for (int i = 0; i < 10; i++) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = rand() % 100;
node->next = NULL;
p->next = node;
p = node;
}
// 打印链表
printf("链表:");
p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// 删除最小值
int min = find_min(head);
printf("最小值:%d\n", min);
delete_min(head);
// 打印链表
printf("删除最小值后的链表:");
p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// 寻找剩余节点中的最小值
int min_remaining = find_min_remaining(head);
printf("剩余节点中的最小值:%d\n", min_remaining);
// 释放链表内存
p = head;
while (p != NULL) {
Node *temp = p;
p = p->next;
free(temp);
}
return 0;
}
```
阅读全文