对于给定的链接列表,您应该编写一个将最大数字移至列表末尾的函数。
示例1:
输入:4 6 2 8 1
输出:4 6 2 1 8
示例2:
输入:9 5 1 8 2
输出:5 1 8 2 9
步骤:
-
要将最大数字移至末尾,首先您需要编写返回largest编号的函数。将最大(最大)数字存储在整数变量
max
中。 -
写基本情况:
- 如果链接列表中只有一个节点,则
返回
head
。 - 如果没有节点,请打印错误消息。
-
初始化两个指针:
prevnode
指向列表中的先前节点,而temp
则指向列表的head
节点。这两个指针均为struct node
类型。 -
将
max
的值与链接列表的每个数字(数据)进行比较。 -
如果
max
的值等于链接列表的第一个数据:
- 将
head
节点与列表中分开,使temp
点指向第二个节点,然后将prevnode
放到pointhead
节点。 - 现在,将第二个节点作为
head = temp
列表的head
节点。 - 遍历链接列表,直到最后一个节点并将独立节点(指向指向指向指向的指向)连接到最后一个节点,其中包含链接列表的最大数量。
- 如果
max
的值等于列表中的第一个数据:
- 遍历链接列表,直到发现数字等于
max
的值。如果发现,则将该节点从prevnode->next = temp->next
的链接列表中分离。 - 创建一个新的节点,该节点是由指针
newnode
指向的,并使用结构成员data
并将NULL
存储在该节点中,并使用结构成员next
,即newnode->data = max; newnode->next = NULL;
- 遍历链接列表,直到最后一个节点并将
newnode
连接到包含链接列表最大数量的最后一个节点。
- 最终显示最终数字最大的新链接列表。
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;
}
}
int 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;
}
return max;
}
void largeToEnd(struct node *head)
{
struct node *prevnode, *newnode;
struct node *temp;
int max;
temp = head;
if(head->next == NULL)
{
printf("\n--------------------------------\n");
printf("Linked list with largest number at end : ");
displayLL(head);
exit(0);
}
max = large(head);
if(head->data == max)
{
temp = temp->next;
head->next = NULL;
prevnode = head;
head = temp;
while(temp->next != NULL )
{
temp = temp->next;
}
temp->next = prevnode;
printf("\n--------------------------------\n");
printf("Linked list with largest number at end : ");
displayLL(head);
exit(0);
}
while(temp->data != max)
{
prevnode = temp;
temp = temp->next;
}
prevnode->next = temp->next;
newnode = (struct node *)malloc(sizeof(struct node));
newnode->data = max;
newnode->next = NULL;
temp = head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
printf("\n--------------------------------\n");
printf("Linked list with largest number at end : ");
displayLL(head);
}
int main()
{
struct node *head = 0, *newnode, *temp;
int n, choice, newdata, max;
// 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);
max = large(head);
printf("\n--------------------------------\n");
printf("Largest number of linked list : %d", max);
largeToEnd(head);
}
我拥有一个网站www.coderlogs.com,在我编写类似博客中,请访问网站以获取更多此类博客文章。