用c语言编程实现一个值(整数)不重复带头结点单链表L(L中各个结点的值是无序的),写一个函数实现将L中的值最小结点移到L的最前面,使其成为第一个结点;
时间: 2024-11-17 20:29:50 浏览: 26
在C语言中,我们可以创建一个链表结构并实现一个函数来完成这个任务。首先,我们需要定义链表节点结构`ListNode`,包含一个整数值`val`和指向下一个节点的指针`next`:
```c
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
```
接下来,编写一个函数`moveSmallestToFront(ListNode** head)`,该函数接受链表头节点的指针,并通过遍历链表找到最小值节点,将其移动到链表头部:
```c
void moveSmallestToFront(ListNode** head) {
if (*head == NULL || (*head)->next == NULL) { // 特殊情况:空链表或只有一个元素
return;
}
ListNode* smallest = *head; // 初始化最小值为头节点
ListNode* current = smallest->next;
while (current != NULL) { // 遍历链表
if (smallest->val > current->val) { // 更新最小值
smallest = current;
}
current = current->next;
}
// 将最小值移动到链表头部
if (smallest != *head) {
smallest->next = *head;
*head = smallest;
}
}
```
在这个函数中,我们首先检查链表是否为空或只有一个元素,这种情况下无需移动。接着,遍历链表找到最小值。最后,将找到的最小值替换原来的头节点,实现最小值在链表头部。
阅读全文