用C语言写出对于一个不带头节点的非空单链表L,设计一个递归算法返回最大值节点的地址
时间: 2024-05-09 17:20:56 浏览: 69
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* maxNode(Node* head) {
if (head->next == NULL) { // 只有一个节点,直接返回该节点
return head;
}
Node* max = maxNode(head->next); // 递归找到后面的最大节点
return head->data > max->data ? head : max; // 返回当前节点和后面最大节点中较大的一个
}
int main() {
Node* head = (Node*)malloc(sizeof(Node)); // 创建头节点
head->next = NULL;
Node* p1 = (Node*)malloc(sizeof(Node)); // 创建第一个节点
p1->data = 1;
head->next = p1;
Node* p2 = (Node*)malloc(sizeof(Node)); // 创建第二个节点
p2->data = 3;
p1->next = p2;
Node* p3 = (Node*)malloc(sizeof(Node)); // 创建第三个节点
p3->data = 2;
p2->next = p3;
p3->next = NULL;
Node* max = maxNode(head->next); // 获取最大节点
printf("Max node: %d\n", max->data);
// 释放链表内存
Node* p = head->next;
while (p != NULL) {
Node* temp = p->next;
free(p);
p = temp;
}
free(head);
return 0;
}
```
阅读全文