用c语言写出一个算法,通过一趟遍历在单链表中确定值最大的结点
时间: 2023-04-09 14:01:21 浏览: 110
好的,这个问题我可以回答。以下是用 C 语言写出的算法:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node *next;
};
struct Node *findMaxNode(struct Node *head) {
struct Node *maxNode = head;
struct Node *curNode = head->next;
while (curNode != NULL) {
if (curNode->val > maxNode->val) {
maxNode = curNode;
}
curNode = curNode->next;
}
return maxNode;
}
int main() {
// 构造一个单链表
struct Node *head = (struct Node *)malloc(sizeof(struct Node));
head->val = 1;
head->next = NULL;
struct Node *curNode = head;
for (int i = 2; i <= 10; i++) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->val = i;
newNode->next = NULL;
curNode->next = newNode;
curNode = newNode;
}
// 找到值最大的结点
struct Node *maxNode = findMaxNode(head);
printf("值最大的结点的值为:%d\n", maxNode->val);
// 释放内存
curNode = head;
while (curNode != NULL) {
struct Node *nextNode = curNode->next;
free(curNode);
curNode = nextNode;
}
return 0;
}
```
这个算法的思路是,从头结点开始遍历单链表,用一个指针记录当前值最大的结点,如果遇到比当前值最大的结点的值更大的结点,就更新指针。遍历完成后,指针所指向的结点就是值最大的结点。
阅读全文