c语言,建立一个链表,输入多个数字,成为链表中的结点,当输入0时,链表创建结束,并且链表中不含0;输入0后再输入一个数,使其按照从小到大的顺序插入链表中,最后打印出最大值,最小值,整个新链表

#include <stdio.h>  
#include <stdlib.h>  
  
// 定义链表节点结构体  
typedef struct Node {  
    int data;  
    struct Node* next;  
} Node;  
  
// 创建新节点  
Node* createNode(int data) {  
    Node* newNode = (Node*)malloc(sizeof(Node));  
    if (newNode == NULL) {  
        printf("Memory allocation failed\n");  
        exit(1);  
    }  
    newNode->data = data;  
    newNode->next = NULL;  
    return newNode;  //直接返回全称,不加指针!!
}  
  
// 插入节点到链表中,保持链表有序  
void insertNode(Node** head, int data) {  //插入,加入链表都用双重指针!!!重要!!
    Node* newNode = createNode(data);  
    if (*head == NULL || (*head)->data >= newNode->data) {  
        newNode->next = *head;  
        *head = newNode;  
    } else {  
        Node* current = *head;  
        while (current->next != NULL && current->next->data < newNode->data) {  
            current = current->next;  
        }  
        newNode->next = current->next;  
        current->next = newNode;  
    }  
}  
  
// 打印链表  
void printList(Node* head) {  
    Node* current = head;  
    while (current != NULL) {  
        printf("%d ", current->data);  
        current = current->next;  
    }  
    printf("\n");  
}  

int findmax(Node* head)
{
	Node*now;
	int max=head->data;
	now=head->next;//坑,记得让整个now都等于next
	while(now!=NULL)//记得是整个now
	{
		if(now->data>max)
		{
			max=now->data;
		}
		now=now->next;
	}
	return max;
}

int findmin(Node*head)
{
	int min=head->data;
	Node*now;
	now=head->next;
	while(now!=NULL)
	{
		if(now->data<min)
		{
			min=now->data;
		}
		now=now->next;
	}
	return min;
}
  
int main() {  
    Node* head = NULL; // 初始化链表头指针为空  
    int num;  
    
    while (1) {  
        scanf("%d", &num); // 输入数字  
        if (num == 0) { // 如果输入的是0,则结束输入,开始处理链表  
            break;  
        } else { // 如果输入的不是0,则将该数字插入到链表中,保持链表有序  
            insertNode(&head, num); //重要!!!!!函数引用双星号指针,写地址符号! 
        }  
    }  
   
    scanf("%d", &num); // 输入要插入的数字  
    insertNode(&head, num); // 将该数字插入到链表中,保持链表有序  
	printf("%d ",findmax(head));
	printf("%d ",findmin(head));
  
    printList(head); // 打印新链表  
    return 0;  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值