【链表初步】最大结点

#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 指向的结点
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值