Single Linked List 특정 위치 데이터 삭제 (delete)

Jaden·2023년 5월 1일
0

연결리스트 특정 위치의 데이터 삭제하기

  • tmp가 삭제할 노드의 앞 노드를 가리킨다.
  • tmp1이 삭제할 노드를 가리킨다.
  • free를 통해 삭제함
void Delete(int n){
	int i;
	Node* tmp = head;
	if(n == 1){
		head = tmp -> ptr;
		free(tmp);
		return;
	}
	for(i = 0; i < n-2; i++){
		tmp = tmp -> ptr;
	}
	Node* tmp1 = tmp -> ptr;
	tmp -> ptr = tmp1 -> ptr;
	free(tmp1);
}

다음의 상태에서
Delete(3); 을 한다면?

	Node* tmp = head;

	for(i = 0; i < n-2; i++){
		tmp = tmp -> ptr;
	}

	Node* tmp1 = tmp -> ptr;

	tmp -> ptr = tmp1 -> ptr;

	free(tmp1);

함수를 빠져나가면 다음과 같이 마무리된다.


만약, head 바로 뒤의 노드를 삭제한다면 어떻게 될까?
이어서 Delete(1)을 해보자.

	Node* tmp = head;

	if(n == 1){
		head = tmp -> ptr;
		free(tmp);
		return;
	}




함수를 빠져나가면 다음과 같이 마무리된다.

0개의 댓글