연결리스트 동적할당 알려주세요

조회수 364회

n개의 양의 정수가 주어졌을 때 이들의 공약수를 구하고 이 공약수들을 연결 리스트에 저장하는 프로그램을 작성하시오.

  • n개의 양의 정수는 text file에 저장한 후 이 파일로부터 읽어 정수형 배열변수에 저장하시오.
  • 공약수들은 배열변수에 저장하지 말고 반드시 연결리스트의 노트에 저장하시오. 즉, 노드 하나에 공약수 한 개를 저장
  • 연결리스트에 저장된 공약수들을 화면에 출력하시오.
  • 동적할당된 노드들을 해제하시오.

해당 문제를 어떻게 풀어야하나요? 저는 이렇게 풀어봤는데 작동이 올바르게 되지 않습니다. 어느 부분을 어떻게 수정해야 하는지 알려주시면 감사하겠습니다!

#pragma warning(disable :4996)
#include <stdio.h>
#include <stdlib.h>

typedef struct LinkedList {
    int data;
    struct LinkedList* next;
}LinkedList;

struct LinkedList* head = NULL;
struct LinkedList* tail = NULL;
struct LinkedList* cur = NULL;

int main() {
    int a, b;
    int* ary;
    LinkedList* cur;
    int cnt = 0;

    ary = (int*)malloc(sizeof(int));

    FILE* fp = fopen("text.txt","r");

    if (fp != NULL) // 파일이 정상적으로 열렸을 때 if문실행
    {
        fscanf(fp, "%d", &a); // "data.txt"파일의 첫번째 값을 입력받아서
        ary = (int*)malloc(sizeof(int) * a); // 첫번째 값만큼 동적으로 정수형 배열을 만듬
        for (b = 0; b < a; b++) // 배열의 크기만큼 값을 입력 받음
        {
            fscanf(fp, "%d", &ary[b]);
        }
        fclose(fp); // 입력을 받은뒤에 파일닫기

        int min = 0;

        for (b = 0; b < a; b++) {
            if (ary[b] > min) {
                min = ary[b];
            }
        }
        for (b = 0; b < min; b++) {
            for (int j = 0; j < sizeof(ary); j++) {
                if (ary[j] % b == 0) {
                    cur = (LinkedList*)malloc(sizeof(LinkedList));
                    cur->data = j;
                    cur->next = NULL;
                    if (head == NULL)
                        head = tail = cur;
                    else {
                        tail->next = cur;
                        tail = cur;
                    }
                }
                tail = head;
                while (tail != NULL) {
                    printf("%d", tail->data);
                    tail = tail->next;
                }
                printf("\n");
            }
        }
        free(ary); // 메모리 반환
    }
}

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)