通过一趟遍历确定长度为n的单链表中值最大的节点(用C语言实现)
时间: 2023-05-25 17:03:38 浏览: 66
以下是一种用C语言实现的方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构
typedef struct Node {
int val;
struct Node *next;
} Node;
// 插入节点到链表末尾
void insert(Node **head, int val) {
Node *newNode = malloc(sizeof(Node));
newNode->val = val;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
Node *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
// 打印链表
void printList(Node *head) {
printf("List: ");
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
// 找到最大值节点
Node* findMax(Node *head) {
Node *maxNode = head;
while (head != NULL) {
if (head->val > maxNode->val) {
maxNode = head;
}
head = head->next;
}
return maxNode;
}
int main() {
// 创建链表
Node *head = NULL;
insert(&head, 3);
insert(&head, 9);
insert(&head, 4);
insert(&head, 6);
insert(&head, 2);
// 打印链表
printList(head);
// 找到最大值节点
Node *maxNode = findMax(head);
printf("Max node value: %d\n", maxNode->val);
return 0;
}
```
该程序首先定义了一个链表结构,包含一个值和一个指向下一个节点的指针。然后,定义了插入节点到链表末尾的函数和打印链表的函数。
在`findMax`函数中,该程序通过一趟遍历找到链表中值最大的节点,并返回该节点的指针。最后,在`main`函数中,该程序创建了一个长度为5的链表,并通过调用`findMax`函数找到了值最大的节点,并打印了该节点的值。