본문 바로가기
코테 문제

[아무문제] Removing duplicated nodes

by 케찹이 2020. 4. 22.

스택을 사용하여 주어진 숫자들중 중복된 숫자를 삭제하는 프로그램입니다. 아주 간단한 코드죠

Input:

        10

        5 3 1 1 8 3 1 5 2 9

Output:

    5->3->1->1->8->3->1->5->2->9->NULL

    5->3->1->8->2->9->NULL

 

#include<stdio.h>
#include<stdlib.h>

typedef struct _Node{
	int data;
	struct _Node* next;
}Node;

void printList(Node* head){
	Node* ptr = head;
	while(ptr){
		printf("%d",ptr->data);
		printf("->");
		ptr = ptr->next;
	}
	printf("NULL");
	printf("\n");
}

void push(Node** head, int data){
	Node* newNode = (Node*)malloc(sizeof(Node));
	newNode->data = data;
	newNode->next = *head;
	*head = newNode;
}

void Remove(Node* head){
	int arry[100] =  {0,};
	Node* now = head->next;
	arry[head->data]++;
	Node* rnode;
	
	int i;
	while(now){
		arry[now->data]++;
		if(arry[now->data] >= 2){
			rnode = now;
			now = now->next;
			head->next = now;
			free(rnode);
		}
		else{
			head = head->next;
			now = now->next;
		}
		
	}
	
}

int main(){
	int N,list[100];
	scanf("%d",&N);
	for(int i = 0;i<N;i++){
		scanf("%d",&list[i]);
	}
	
	Node* head= NULL;
	
	for(int i = N-1;i>=0;i--){
		push(&head,list[i]);
	}
	
	printList(head);
	Remove(head);
	printList(head);
	
	return 0;
}

댓글