본문 바로가기

공부/자료구조 | 알고리즘

[자료구조] 단순 연결리스트 노드 삽입

반응형
노드 삽입 방법 
  1. 노드를 삽입할 위치(선행 노드)를 아는 경우
     
    1.   헤드포인터가 NULL인 경우: 공백 리스트에 삽입
    2.   preNULL인 경우: 리스트의 맨 처음에 삽입
    3.   일반적인 경우: 리스트의 중간/마지막에 삽입
  2. 리스트의 제일 마지막에 노드를 추가하는 경우
  3. 리스트의 제일 처음 노드로 삽입하는 경우 -> 권장

 

1. 선행 노드를 아는 경우 
// head: 리스트의 헤드 포인터
// pre : 선행 노드
// new_node : 삽입될 노드 (NULL이 아니라고 가정)

void insert_node(Node *head, Node *pre, Node *new_node) 
{
	if( head == NULL ){	// 공백리스트인 경우
		// new_node->link = NULL; 
		head = new_noe; 
	}
	else if( pre == NULL ){ 	// pre가 NULL이면 첫번째 노드로 삽입
		new->link = head;
		head = new_node;
	}
	else {		 // pre 다음에 삽입
		new_node->link = pre->link; 
		pre->link = new_noed; 
	}
}

 

2. 선행 노드를 모르는 경우 (리스트 마지막에 노드 삽입)
// head: 리스트의 헤드 포인터
// new_noed : 삽입될 노드 
void insert_node_at_rear(Node *head, Node *new_noe) 
{
	if( head == NULL ){	// 공백리스트인 경우
		// new_node->link = NULL; 
		head = new_node; 
	}
	else  {
		Node *list= head;

		while(list->link != NULL)
			list = list->link;
		list->link = new_node;
	}
}

 

3. 리스트 처음에 노드 삽입  (순서에 관계 없이)
// head: 리스트의 헤드 포인터
// new_node : 삽입될 노드 
void insert_node_at_front(Node *head, Node *new_node) 
{
	new_node->link = head;
	head = new_node;
}

 

따라서, 노드는 리스트 앞부분에 삽입하는 것이 가장 간결하고 쉬우며, 
특별히 노드의 순서를 유지할 필요가 없는 경우 리스트의 앞쪽에 삽입하는 것이 가장 편리하다는 것을 알 수 있다. 

반응형