이중 연결 리스트의 연산
단순 연결 리스트와 크게 다를 것이 없으니 단순 연결 리스트를 충분히 이해했다면 쉽게 이해할 수 있다.
아래 글을 통해 확인하고 오는 것도 좋을 것이다.
[자료구조] 단순 연결 리스트(LinkedList)의 삭제연산
노드의 삭제 연산 단순 연결 리스트에서 노드를 삭제하는 방법은 다음과 같다. 1. 삭제할 노드의 앞 노드를 찾는다. 2. 앞 노드에 삭제할 노드의 링크 필드값을 저장한다. 3. 삭제한 노드의 앞 노
zldn.tistory.com
이중 연결 리스트의 삭제연산
이중 연결 리스트의 삭제연산을 하기 위해서는 삭제하려는 노드의 양쪽 포인터 2개와 이전 노드의 rightLink 포인터와 다음 노드의 leftLink 포인터를 다뤄야한다.
이중 연결 리스트에서 노드를 삭제하는 방법은 다음과 같다.
1. 삭제할 노드의 오른쪽 노드의 주소를 삭제할 노드의 왼쪽 노드의 오른쪽 링크 필드에 저장한다.
2. 삭제할 노드의 왼쪽 노드의 주소를 삭제할 노드의 오른쪽 노드의 왼쪽 링크 필드에 저장한다.
3. 노드를 순서대로 연결한다.
다음 이중 연결 리스트에서 포인터 remove가 가리키는 노드를 삭제하는 과정을 예로 들어보자.
1. remove 노드의 왼쪽 노드의 rightLink에 remove 노드의 다음 노드의 주소값을 저장한다.
2. remove 노드 다음 노드의 leftLink에 remove 노드 이전 노드의 주소값을 저장한다.
코드로 표현해 보자.
1
2
3
4
5
6
7
8
9
|
void deleteNode(Node** Head, Node* remove) {
if (*Head == NULL) return;
else if (remove == NULL) return;
else {
remove->leftLink->rightLink = remove->rightLink;
remove->rightLink->leftLink = remove->leftLink;
free(remove);
}
}
|
cs |
2 // Head 노드가 비어있다면, 즉 공백리스트라면 삭제할 노드도 없으니 연산을 중단한다.
3 // remove 노드가 비어있다면 연산을 중단한다.
4 // 그렇지않다면
5 // remove 노드의 왼쪽 노드(remove->leftLink)의 오른쪽 링크 필드(->rightLink)에 remove 노드의 오른쪽 링크 필드값(remove->rightLink)을 저장한다.
6 // remove 노드의 오른쪽 노드(remove->rightLink)의 왼쪽 링크 필드(->leftLink)에 remove 노드의 왼쪽 링크 필드값(remove->leftLink)을 저장한다.4-
7 // 삭제할 remove 노드의 메모리를 해제한다.
이중 연결 리스트의 소멸연산
이중 연결 리스트의 소멸연산은 단순 연결 리스트의 소멸연산과 완전히 동일하다.
free()함수를 호출하는 것 뿐이니 당연하다.
1
2
3
|
void destoryNode(Node* node) {
free(node);
}
|
cs |
'자료구조 > 자료구조 정리' 카테고리의 다른 글
[자료구조] 맥북에서 난수발생 함수 사용하기, 실행시간(cpu time) 구하기 (2) | 2025.03.22 |
---|---|
[자료구조] 이중 연결 리스트의 예제 프로그램(이것이 자료구조+알고리즘이다-p.50(1.3.2)) (0) | 2024.02.11 |
[자료구조] 이중 연결 리스트(Doubly Linked List)의 생성연산과 삽입연산 (0) | 2024.01.28 |
[자료구조] 이중 연결 리스트(Doubly Linked List)의 개념 (0) | 2024.01.26 |
[자료구조] 단순 연결 리스트의 예제 프로그램(이것이 자료구조+알고리즘이다 - p.36 (1.2.3)) (2) | 2024.01.26 |