본문 바로가기

프로그래밍 언어들/C

20141123_단일 연결리스트(singly linked list)_노드 추가 함수(addNode)

C언어로 구현한 단일 연결리스트(singly linked list)의 한 부분입니다.

리스트의 맨 뒤에 새로 생성한 노드를 추가하는 addNode 함수로

전역 변수를 사용하지 않고 이중 포인터를 사용해 구현했습니다.






#include <stdio.h>

#include <malloc.h>


typedef struct node{

int data;

struct node* next;

}NODE;


/*

전달받은 데이터를 저장하는 하나의 노드를 생성하는 함수

*/

NODE* createNode(int data)

{

// 동적할당으로 노드를 생성해준다.

NODE *temp = (NODE*)malloc(sizeof(NODE));


// 해당 노드가 가르키는 다음 노드의 주소 초기화

temp->next = NULL;


// 전달 받은 데이터를 저장

temp->data = data;


return temp;

}


/*

현재 리스트의 맨 뒤에 노드를 추가해주는 함수

*/

void addNode(NODE **head, int data)

{

// 전달받은 값을 저장하는 새로운 노드를 생성한다.

NODE *newNode = createNode(data);


// 헤드에 아무것도 없을 경우

// 즉, 현재 노드가 하나도 없을 경우

if(*head == NULL)

{

// 헤드에 생성한 노드를 연결

*head = newNode;

}

else

{

NODE *temp = *head;


// 마지막 노드를 찾는 루프

while(temp->next != NULL)

{

temp = temp->next;

}


// 마지막 노드일 경우 새로 생성한 노드 연결

temp->next = newNode;

}

}


int main(void)

{

// 리스트의 가장 처음 노드를 가르키는 포인터

NODE *head = NULL;


// 맨 뒤에 데이터 '10'을 가진 노드를 추가

addNode(&head, 10);


// 맨 뒤에 데이터 '20'을 가진 노드를 추가

addNode(&head, 20);


// 맨 뒤에 데이터 '30'을 가진 노드를 추가

addNode(&head, 30);


return 0;

}




결과 값을 보시면 아래와 같습니다.

head 포인터가 '10'이라는 데이터를 가진 노드를 가르키고 있고,

해당 노드는 '20' 이라는 데이터를 가진 다음 노드를 가르키고,

이 노드 역시 '30'이라는 데이터를 가진 노드를 가르키게 됩니다.

마지막 노드는 가르키는 노드가 없습니다.