본문 바로가기
C++/자료구조

[C++]Reverse doubly linked list with sentinel nodes

by 덤더리덤떰 2023. 11. 29.

1. 연결리스트 구현

: 구현 방법 관련한 자세한 설명은 아래 글에

2023.11.29 - [C++/자료구조] - [C++]Doubly linked list with sentinel nodes

 

[C++]Doubly linked list with sentinel nodes

1. 설명 : head와 tail이 직접 리스트의 첫번째 노드와 마지막 노드를 가리키는 것이 아닌 sentinel node로 설정하여 각각의 next/prev 노드가 첫번째 노드와 마지막 노드를 가리키게 함으로써 노드 삽입/

growingupis.tistory.com

 

2. 연결리스트 역순으로 

 

  • 첫 번째 노드부터 마지막 노드까지 순회
  • 해당 노드의 next는 노드의 prev
  • 해당 노드의 prev는 노드의 next
  • 이때, 노드의 next/prev변경하고나면 다음 노드로 순회하지 못하기에 임시로 노드의 next저장하는 노드 포인터 생성
  • 다 순회하고나면 headtail노드의 각각 nextprev 업뎃
  • 첫번째 노드와 마지막 노드의 prev/nexthead/tail로 업뎃
    (Ⅲ,Ⅳ 과정의 추가로 코드가 조금 복잡해보일 수 있음)

 

 

 

 

 

void reverse() {
	Node* curNode = begin();
	// head 4 5 6 7 tail
	// head 7 6 5 4 tail
	while (curNode != end()) {
		Node* temp_next = curNode->getNext();
		curNode->setNext(curNode->getPrev());
		curNode->setPrev(temp_next);
		curNode = temp_next;
	}
	Node* firstNode = begin();
	Node* lastNode = last();
	head->setNext(lastNode);
	tail->setPrev(firstNode);
	begin()->setPrev(head);
	last()->setNext(tail);
	
}

 

 

 

'C++ > 자료구조' 카테고리의 다른 글

[c++] Heap  (1) 2023.12.08
[C++]AVL Tree  (0) 2023.12.07
[C++]Doubly linked list with sentinel nodes  (1) 2023.11.29
[c++] 스택 활용한 수식 계산  (0) 2023.11.16
[C++]원형큐  (0) 2023.11.14