연결된 목록의 사본 만들기

2609 단어 clinkedlistbeginners
주어진 연결 목록에 대해 이미 생성된 연결 목록의 복사본을 만드는 함수를 작성해야 합니다.

예 1:
입력 : 연결 리스트 : 4 6 2 8 1
Output : 연결 리스트의 복사본 : 4 6 2 8 1

예 2:
입력 : 연결 리스트 : 4 5 9 8 2
Output : 연결 리스트의 복사본 : 4 5 9 8 2

설명:
  • 이것의 논리는 구조의 새 노드를 만들고 기존의 모든 노드를 새 노드에 복사하는 것입니다.
  • 기존 목록이 null(재귀적으로)이 될 때까지 프로세스가 계속됩니다.

  • 연결된 목록의 복사본을 만드는 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 copy(struct node *head)
    {
        struct node *temp = head;
        struct node *temp1, *temp2, *head1;
    
        temp1 = (struct node *)malloc(sizeof(struct node));
        temp1->next = NULL;
        temp1->data = temp->data;
        head1 = temp1;
        temp1->next = NULL;
        temp = temp->next;
    
        while(temp != NULL)
        {
           temp2 = (struct node *)malloc(sizeof(struct node));
           temp2->data = temp->data;
           temp1->next = temp2;
           temp1 = temp2;
           temp = temp->next;
        }
        printf("\n--------------------------------\n");
        printf("Copy of original linked list : ");
        displayLL(head1);
    }
    
    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("Original linked list : ");
       displayLL(head);
       copy(head);
    }
    


    산출:

    Enter the number of nodes in the list : 4
    Enter the data1 : 3
    Enter the data2 : 7
    Enter the data3 : 3
    Enter the data4 : 8
    --------------------------------
    Original linked list : 3 7 3 8 
    --------------------------------
    Copy of original linked list : 3 7 3 8 
    

    좋은 웹페이지 즐겨찾기