设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的节点用C语言呈现
时间: 2024-10-07 20:07:20 浏览: 41
设计一个简单的C语言算法来找到单链表中值最大的节点,我们可以使用迭代的方式。这里假设链表节点结构包含一个整数值`data`和指向下一个节点的指针`next`。
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 找到链表最大值节点的函数
ListNode* findMaxNode(ListNode* head) {
// 如果链表为空,返回NULL
if (head == NULL) {
return NULL;
}
// 初始化最大值节点为头节点,同时设置当前节点为头节点
ListNode* maxNode = head;
ListNode* current = head;
// 遍历整个链表
while (current != NULL) {
// 如果当前节点的值大于maxNode的值,更新maxNode
if (current->data > maxNode->data) {
maxNode = current;
}
// 移动到下一个节点
current = current->next;
}
return maxNode;
}
// 示例
int main() {
// 创建链表示例:1 -> 3 -> 5 -> 9 -> 2
ListNode* list = (ListNode*)malloc(sizeof(ListNode));
list->data = 1;
list->next = (ListNode*)malloc(sizeof(ListNode));
list->next->data = 3;
list->next->next = (ListNode*)malloc(sizeof(ListNode));
list->next->next->data = 5;
list->next->next->next = (ListNode*)malloc(sizeof(ListNode));
list->next->next->next->data = 9;
list->next->next->next->next = (ListNode*)malloc(sizeof(ListNode));
list->next->next->next->next->data = 2;
list->next->next->next->next->next = NULL;
ListNode* maxNode = findMaxNode(list);
if (maxNode != NULL) {
printf("链表中值最大的节点是: %d\n", maxNode->data);
} else {
printf("链表为空,无法找到最大值.\n");
}
free(list); // 别忘了释放内存
return 0;
}
```
这个算法只遍历一次链表就能找到最大值节点。在`main`函数里创建了一个例子,并调用了`findMaxNode`函数来找出最大值节点。
阅读全文