C语言设计一个算法,通过一趟遍历在单链表中确定值最大的结点
时间: 2024-12-19 22:14:48 浏览: 5
在C语言中,你可以使用迭代的方式来实现这个算法,通过维护两个指针,一个指向当前最大节点,另一个遍历链表。以下是详细的步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 函数声明,用于找到链表中值最大的节点
ListNode* findLargestNode(ListNode* head);
// 插入节点到链表
void insert(ListNode** head, int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = *head;
*head = newNode;
}
// 打印链表
void printList(ListNode* head) {
while (head != NULL) {
printf("%d -> ", head->val);
head = head->next;
}
printf("NULL\n");
}
// 主函数
int main() {
// 初始化链表示例
ListNode* head = NULL;
insert(&head, 5);
insert(&head, 3);
insert(&head, 9);
insert(&head, 1);
insert(&head, 7);
printf("Original List:\n");
printList(head);
// 找到并打印最大节点
ListNode* maxNode = findLargestNode(head);
if (maxNode != NULL) {
printf("Largest Node: %d\n", maxNode->val);
} else {
printf("No nodes found.\n");
}
return 0;
}
// 实现寻找最大节点的函数
ListNode* findLargestNode(ListNode* head) {
if (head == NULL) return NULL; // 空链表处理
ListNode* current = head;
ListNode* largest = head;
// 遍历链表,比较每个节点的值
while (current != NULL) {
if (current->val > largest->val) {
largest = current;
}
current = current->next;
}
return largest;
}
```
在这个程序中,`findLargestNode`函数遍历整个链表一次,通过不断更新`largest`指针,最后返回值最大的节点。如果链表为空,函数会直接返回`NULL`。
阅读全文