<aside> ❗ 단순연결리스트와는 다르게 하나의 노드가 두개의 링크를 가지며 양방향 순회가 가능함

</aside>

스크린샷 2022-06-30 오후 10.27.56.png

[1]Node struct의 내용으로는 data와 이전 노드를 가르킬 prev 다음노드를 가르킬 next 포인터들을 추가해준다

[2]클래스에는 전체 노드의 갯수를 세어줄 count와 sentinel node인 header와 trailer를 추가해준다.


<이중연결리스트의 생성>

스크린샷 2022-06-30 오후 10.33.08.png

[1]생성시에 count는 0으로 의미있는 node의 갯수를 0개라고 설정합니다.

[2]header node(sentinel node)는 data=0, prev=null, next=null로 생성합니다.

[3]trailer node도 마찬가지로 설정해줍니다 →이와같이 선언하면 두 node는 연결되지 않고

메모리 어딘가에 존재하게 됩니다.

[4]두 sentinel node를 연결해주기 위해 header의 next를 trailer node로

[5]trailer node의 prev를 header node로 설정해줍니다.


<insert()함수 구현> = 특정위치에 노드를 삽입하는 함수임

void insert(Node* p, int val)
	{
		Node* new_node = new Node {val, p->prev, p};
		new_node->prev->next = new_node;  //p->prev->next = new_node로 사용해도 됨
		new_node->next->prev = new_node;  //p->prev = new_node로 사용해도 됨
		count++;
	}

[1]삽입할 위치 p와 data val을 인자로 받아줌

[2]new_node를 생성하는데 p노드의 앞에 삽입할 것이므로 prev를 p→prev로, next를 p로 설정해줌

[3]new_node의 prev의 next포인터를 new_node로 지정해줌

[4]new_node의 next의 prev포인터를 new_node로 설정해줌

[5]전체 노드의 개수인 count를 ++해줌