用c写一个删除链表中最小值的节点代码
时间: 2024-10-12 13:05:08 浏览: 33
在 C 语言中,删除链表中最小值的节点需要遍历链表,找到最小值,然后更新前一个节点指向当前最小值的下一个节点。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 创建新节点
ListNode* createNode(int value) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode));
node->val = value;
node->next = NULL;
return node;
}
// 删除最小值节点
void removeMinValue(ListNode** head) {
if (*head == NULL || (*head)->next == NULL) { // 如果链表为空或只有一个元素
free(*head);
*head = NULL;
return;
}
ListNode *minNode = *head; // 初始化为头节点
ListNode *current = *head->next;
while (current != NULL) {
if (current->val < minNode->val) {
minNode = current;
}
current = current->next;
}
if (minNode == *head) { // 如果最小值是第一个节点
*head = minNode->next;
free(minNode);
} else {
minNode->next = minNode->next->next;
}
}
// 打印链表
void printList(ListNode* head) {
while (head != NULL) {
printf("%d -> ", head->val);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 创建一个例子链表
ListNode* list = createNode(4);
list->next = createNode(2);
list->next->next = createNode(7);
list->next->next->next = createNode(1);
printf("Original List: ");
printList(list);
removeMinValue(&list); // 删除最小值
printf("\nAfter Removing Min Value: ");
printList(list);
return 0;
}
```
在这个示例中,`removeMinValue` 函数会删除链表中的最小值节点。注意,这个代码假设输入链表是非空的,并且如果有多个相同的最小值,它只会保留最后一个遇到的最小值。
阅读全文