정렬된 연결 목록에서 중복을 제거합니다.

2942 단어 clinkedlistbeginners
정렬된 연결 목록이 주어졌다고 가정하면 연결 목록을 순회하고 목록에서 중복 항목을 제거한 다음 결과로 정렬된 연결 목록을 인쇄해야 합니다.

예 1:

입력 : 연결 리스트 : 1, 2, 2, 3, 3, 4, 5
Output : 중복 제거 후 Linked List : 1, 2, 3, 4, 5

예 2:

입력 : 연결 리스트 : 5, 5, 6, 7, 8, 8
Output : 중복 제거 후 Linked List : 5, 6, 7, 8

단계:


  • currentNode 유형의 두 포인터 nextNodestruct node를 선언합니다.
  • 연결된 목록의 currentNode 노드를 가리키도록 head를 만듭니다.
  • 마지막 노드에 도달할 때까지 연결된 목록을 계속 반복합니다.
  • 현재 노드의 데이터를 다음 노드의 데이터와 비교합니다.
  • 같으면 이웃 노드의 주소를 포인터 nextNodenextNode = currentNode->next->next에 저장하여 노드 중 하나(중복으로 간주됨)를 목록에서 분리합니다. 그런 다음 현재 노드와 중복 노드 사이의 링크를 끊고 포인터 nextNode 즉, currentNode->next = nextNode 로 가리키는 노드에 현재 노드를 연결합니다.
  • 그렇지 않은 경우 연결된 목록을 계속 순회합니다.
  • 마지막으로 연결된 목록을 인쇄합니다.

  • 정렬된 연결 목록에서 중복 항목을 제거하는 C 프로그램:




    *******************************************************************************/
    #include <stdio.h>
    #include <stdlib.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 removeDup(struct node *head)
    {
        struct node *currentNode = head;
        struct node *nextNode;
    
        while(currentNode != NULL && currentNode->next != NULL)
      {
           if(currentNode->data == currentNode->next->data )
           {   
               nextNode = currentNode->next->next;
            if(nextNode == NULL)
               {
                 currentNode->next = NULL;
                 break;
               }
               currentNode->next = nextNode;
           }   
           if(currentNode->data != currentNode->next->data)
           {
               currentNode = currentNode->next;
           }
       }
        printf("\n--------------------------------\n");
        printf("Linked List after removing duplicates : ");
        displayLL(head);
    }
    
    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);
       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);
       removeDup(head);
    }
    


    자세한 내용은 이것을보십시오.

    좋은 웹페이지 즐겨찾기