#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;
}
c语言,建立一个链表,输入多个数字,成为链表中的结点,当输入0时,链表创建结束,并且链表中不含0;输入0后再输入一个数,使其按照从小到大的顺序插入链表中,最后打印出最大值,最小值,整个新链表
于 2023-12-22 18:13:57 首次发布