将最大的数字移至链接列表的末尾。
#初学者 #c #linkedlist

对于给定的链接列表,您应该编写一个将最大数字移至列表末尾的函数。

示例1:
输入:4 6 2 8 1
输出:4 6 2 1 8

示例2:
输入:9 5 1 8 2
输出:5 1 8 2 9

步骤:

  • 要将最大数字移至末尾,首先您需要编写返回largest编号的函数。将最大(最大)数字存储在整数变量max中。

  • 写基本情况

  1. 如果链接列表中只有一个节点,则 返回head
  2. 如果没有节点,请打印错误消息。
  • 初始化两个指针:prevnode指向列表中的先前节点,而temp则指向列表的head节点。这两个指针均为struct node类型。

  • max的值与链接列表的每个数字(数据)进行比较。

  • 如果max的值等于链接列表的第一个数据

  1. head节点与列表中分开,使temp点指向第二个节点,然后将prevnode放到point head节点。
  2. 现在,将第二个节点作为head = temp列表的head节点。
  3. 遍历链接列表,直到最后一个节点并将独立节点(指向指向指向指向的指向)连接到最后一个节点,其中包含链接列表的最大数量。
  • 如果max的值等于列表中的第一个数据
  1. 遍历链接列表,直到发现数字等于max的值。如果发现,则将该节点从prevnode->next = temp->next的链接列表中分离。
  2. 创建一个新的节点,该节点是由指针newnode指向的,并使用结构成员data并将NULL存储在该节点中,并使用结构成员next,即 newnode->data = max; newnode->next = NULL;
  3. 遍历链接列表,直到最后一个节点并将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,在我编写类似博客中,请访问网站以获取更多此类博客文章。