用C语言编写下列算法,假定单链表的头指针用L表示,类型为LinkList。(1)将一个单链表中的所有结点按相反次序链接。(10分) (2)删除单链表中第i个(i≥1)结点。(5分) (3)从单链表中查找出最小值。(5分)
时间: 2024-10-16 19:04:40 浏览: 3
(1) 反转单链表的C语言实现:
```c
struct LinkList {
int data;
struct LinkList* next;
};
void reverse(LinkList** L) {
if (*L == NULL || (*L)->next == NULL) return; // 如果链表为空或只有一个元素,直接返回
LinkList *prev = NULL, *current = *L, *temp = NULL;
while (current != NULL) {
temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // 更新前驱节点为当前节点
current = temp; // 移动到下一个节点
}
*L = prev; // 最后更新头节点为反转后的第一个节点
}
```
(2) 删除单链表中第i个结点(C语言):
```c
void deleteNodeAtPosition(LinkList** L, int i) {
if (*L == NULL || i <= 0) return;
// 遍历找到倒数第i个节点
for (int j = 1; j < i && *L != NULL; j++) {
*L = (*L)->next;
}
if (*L == NULL) return; // 如果i大于链表长度,则没有目标节点
// 递归删除倒数第i个节点
if ((*L)->next != NULL) {
(*L)->next = (*L)->next->next;
} else {
*L = NULL; // 如果要删除的是最后一个节点
}
}
```
(3) 查找并返回单链表中的最小值(C语言):
```c
int findMin(LinkList* L) {
if (L == NULL) return INT_MAX; // 初始化极大整数值
int minVal = L->data;
while (L->next != NULL) {
if (L->next->data < minVal) {
minVal = L->next->data;
}
L = L->next;
}
return minVal;
}
```
阅读全文