<aside> ❗ 단순연결리스트와는 다르게 하나의 노드가 두개의 링크를 가지며 양방향 순회가 가능함
</aside>
[1]Node struct의 내용으로는 data와 이전 노드를 가르킬 prev 다음노드를 가르킬 next 포인터들을 추가해준다
[2]클래스에는 전체 노드의 갯수를 세어줄 count와 sentinel node인 header와 trailer를 추가해준다.
<이중연결리스트의 생성>
[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를 ++해줌