본문 바로가기

자료구조&알고리즘

[이중 연결 리스트] 노드 구조체, 노드 생성, 노드 맨 앞 추가, 생성 된 순서의 역순 연결

이중 연결 리스트의 노드를 맨 앞에 삽입하는 함수에 대한 샘플 코드를 작성해보자. 

이중 연결 리스트는 노드의 왼쪽과 오른쪽의 값이 서로 연결되어 있는 자료구조이다. 

 

1. 구조체 정의 

typedef struct doublyNode {
    int value;
    struct doublyNode* next;
    struct doublyNode* prev;
} DNode;

 

이중 연결 리스트의 노드를 정의하는 구조체이다. 각 노드는 값 (value), 다음 노드에 대한 포인터(next),

이전 노드에 대한 포인터(prev)를 가진다. 

 

2. 전역 변수 

DNode* head = NULL;
DNode* tail = NULL;

리스트의 시작과 끝을 가리키는 head , tail 포인터를 NULL 값으로 초기화해준다. 

 

3. 노드 삽입 함수 

void insertDNodeFront(int data) {
    DNode* newNode = (DNode*)malloc(sizeof(DNode)); // 새로운 노드를 할당
    newNode->value = data;
    newNode->prev = newNode->next = NULL;

    if (head == NULL) {
        head = newNode;
        tail = newNode;
    } else {
        newNode->next = head;
        head->prev = newNode;
        head = newNode;
    }
}

이 함수는 새로운 노드를 리스트의 맨 앞에 삽입한다. 리스트가 비어있을 경우, 새로운 노드가 'head'와 'tail'이 된다. 

그렇지 않으면, 새로운 노드는 현재의 'head' 앞에 삽입된다. 

 

4. 테스트 및 출력 

int main() {
    insertDNodeFront(10);
    insertDNodeFront(20);
    insertDNodeFront(30);

    DNode* current = head;
    while (current != NULL) {
        printf("%d ", current->value);
        current = current->next;
    }

    return 0;
}

 

main 함수에서는 노드를 삽입하고, 리스트의 모든 노드를 출력하여 삽입 결과를 확인한다.