profile image

L o a d i n g . . .

사용자로부터 정수 값을 입력받아 단일 연결 리스트로 생성한다.
리스트 노드는 입력받은 순서대로 연결한다.
단일 연결 리스트 삽입 함수를 사용한다.(교재 참고)
display() 함수에 의해 각 노드의 내용을 출력한다. (교재 참고)
- 입력을 끝내기 위해 마지막에 -1을 입력한다.
- ListNode 타입을 정의하여 사용한다.
- 동적 메모리 할당을 사용한다.

<입출력 예1>
15 25 70 5 10 -1
15 25 70 5 10

<입출력 예2>
7 20 12 -1
7 20 12

 

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

typedef struct List{
    int data;
    struct List *link;
} ListNode;

void display(ListNode *h)
{
    while (h != NULL) {
        printf("%d ", h->data);
        h = h->link;
    }
    printf("\n");
}

void insert_node(ListNode **phead ,ListNode *p ,ListNode *new_node) 
{
    if (*phead == NULL){
        new_node->link = NULL;
        *phead = new_node;
    }
    else if (p==NULL){
        new_node->link = *phead;
        *phead = new_node;
    }
    else {
        new_node->link = p->link;
        p->link = new_node;
    }
}

int main()
{
    ListNode    *head = NULL;
    ListNode    *p, *new_node;
    int         data;

    // 사용자 입력, 노드 생성, 리스트 삽입 
    p = head;
    do {
        scanf("%d", &data);
        if (data == -1) break;
        
        // 새 노드를 위한 동적 메모리 할당
        new_node = (ListNode *) malloc(sizeof(ListNode));
        
        // 사용자가 입력한 데이터를 노드에 자료 저장
        new_node->data = data;
        
        // 새 노드를 리스트에 삽입 : insert_node() 이용
        insert_node(&head, p, new_node);
        p = new_node;
    } while (1);

    // 출력 
    display(head);
}

'Language > C' 카테고리의 다른 글

[C/C++] 이중 LinkedList 구현 예제  (0) 2021.10.14
[C] Linked List - 삽입, 삭제, 순회  (0) 2021.10.04
[C] 구조체, 포인터  (0) 2021.09.20
복사했습니다!