对于给定的链接列表,您应该编写两个单独的功能,这些功能在链接列表中找到最大和最小的数字并打印两个数字。
示例1:
输入:4 6 2 8 1
输出:最大数字:8
输出:最小数字:1
示例2:
输入:4 5 9 8 2
输出:最大数字:9
输出:最小数字:2
找到最大数量的步骤:
-
将整数变量
max
初始化为INT_MIN
。 -
使用临时指针
temp
开始穿越链接列表,并将链接列表中的每个数据元素与变量max
进行比较,直到链接列表的结束。 -
如果当前节点的数据大于
max
的值,则将当前节点数据的值存储到max
中。 -
最后,打印包含链接列表最大数量的可变
max
的值。
找到最小数字的步骤:
-
将整数变量
min
初始化为INT_MAX
。 -
使用临时指针
temp
开始穿越链接列表,并将链接列表中的每个数据元素与变量min
进行比较,直到链接列表的结束。 -
如果当前节点的数据小于
min
的值,则将当前节点数据的值存储到min
中。 -
最后,打印包含链接列表的最小数量的可变
min
的值。
注意:我们正在使用int_max,因为所有数据元素都比此元素要少,而且INT_MIN,因为所有数据元素都大于此。使用这两个宏我们的发现变得非常简单。
C程序找到了链接列表中最大和最小的数字。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
struct node
{
int data;
struct node * next;
};
void displayLL(struct node * head)
{
struct node * temp;
temp = head;
temp=head;
while(temp!=0)
{
printf("%d ",temp->data);
temp = temp->next;
}
}
void small(struct node *head)
{
struct node *temp = head;
int min;
min = INT_MAX;
while(temp != NULL)
{
if(min > temp->data)
{
min = temp->data;
}
temp = temp->next;
}
printf("\n--------------------------------\n");
printf("Smallest number of linked list : %d", min);
}
void large(struct node *head)
{
struct node *temp = head;
int max;
max = INT_MIN;
while(temp != NULL)
{
if(max < temp->data)
{
max = temp->data;
}
temp = temp->next;
}
printf("\n--------------------------------\n");
printf("Largest number of linked list : %d", max);
}
int main()
{
struct node *head = 0, *newnode, *temp;
int n, choice, newdata;
// Create Linked List //
printf("Enter the number of nodes in the list : ");
scanf("%d", &n);
if(n == 0)
{
printf("--------------------------------\n");
printf("Linked list cannot be empty");
exit(0);
}
for(int i = 1; i<=n; i++)
{
newnode = (struct node *)malloc(sizeof(struct node));
printf("Enter the data%d : ", i);
scanf("%d", &newnode->data);
newnode->next = 0;
if(head == 0)
{
head = temp = newnode;
}
else
{
temp->next = newnode;
temp = newnode;
}
}
printf("--------------------------------\n");
printf("Linked list : ");
displayLL(head);
small(head);
large(head);
}