[단일 연결 리스트의 특징]

- 다음 노드는 알 수 있지만, 이전 노드는 알 수 없다.


[insert_front 과정]


01234


[delete_front 과정]

012


typedef struct _Node Node;

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

Node * Head;

void insert_front( int data ) {
	Node * node = (Node *)malloc(sizeof(Node));

	node->data = data;
	node->next = Head;

	Head = node;
}

void delete_front() {
	Node * node = Head;
	Head = Head->next;
	free(node);
}

void print_list() {
	Node * node = Head;

	while(node != NULL) {
		printf("%d -> ", node->data);

		node = node->next;
	}

	printf("NULL\n");
}

int main() {
	int i;

	for(i = 0; i<10; i++)
	{
		insert_front(i);
		print_list();
	}

	for(i = 0; i<9; i++)
	{
		delete_front();
		print_list();
	}
}


[결과]


[문제점]

- 노드의 삽입/삭제 코드가 일반화 되지 못 함.

(코드에서 삽입하는 위치가 맨 앞으로 고정했기 때문에 하나의 함수였지만, 다른 특정한 위치에 삽입을 하거나 삭제를 할려고 하면 별도의 함수를 또 만들어야 한다.)


[해결책]

- 헤더부분에 데이터가 들어있지 않은 dummy 노드를 만들게 되면 입력되는 형태가 일치되어 코드를 일반화 할 수 있음.



+ Recent posts