#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
// 找到链表中的最大节点并返回其地址
struct node *largestnode1(struct node *head);
// 找到链表中的最大节点,将其地址传给指针变量 pmax
void largestnode2(struct node *head, struct node **ppmax);
// 销毁链表
void destroy(struct node* head);
// 以前插法创建链表
struct node* headinsert(struct node* head);
int main() {
struct node *head = NULL;
struct node *pmax;
head = headinsert(NULL); // 用前插法创建链表
// 找到最大结点,将其地址传给 pmax
pmax = largestnode1(head);
if (pmax!= NULL) {
printf("%d\n", pmax->data);
} else {
printf("链表为空,无法找到最大节点。\n");
}
destroy(head);
return 0;
}
struct node* headinsert(struct node* head) {
struct node *p;
int n = 0;
// 采用相同的方式创建 6 个结点,并且前插
while (n < 6) {
p = (struct node *)malloc(sizeof(struct node));
scanf("%d", &(p->data));
// 挂链
p->next = head; // 新结点的指针域,指向原来的第 1 个结点
head = p; // 让新结点成为第 1 个结点
n++;
}
return head; // 返回第 1 个结点的地址
}
struct node *largestnode1(struct node* head) {
if (head == NULL) {
return NULL;
}
struct node *pmax = head; // 先假定第 1 个结点最大
struct node *p = head->next; // p 指向第 2 个结点
while (p!= NULL) {
if (p->data > pmax->data) {
pmax = p;
}
p = p->next;
}
return pmax;
}
void destroy(struct node* head) {
struct node *p;
while (head!= NULL) {
p = head; // p 指向要销毁的结点
head = head->next; // head 指向再下一个要销毁的结点
free(p); // 销毁 p 指向的结点
}
}
【链表初步】最大结点
最新推荐文章于 2024-11-11 23:45:00 发布