이중연결리스트(Double Linked List)
다음 노드뿐 아니라 이전 노드까지 가리키는 노드로 구성된 연결리스트
이중연결리스트의 구조
이중연결리스트는 역순으로 출력, 노드 삭제 등 이전 노드를 참조해야할 때 사용하면 유용하다.
추가해야할 포인터값이 더 늘어났다는 것을 제외하면 연결리스트의 노드 추가 과정과 동일하다.
이중연결리스트는 바로 가리킬 수 있기 때문에 연결리스트보다 삭제연산이 간단하다. 이 점을 제외하고는 연결리스트와 동일하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include<stdio.h> #include<stdlib.h> typedef struct node{ int data; struct node *left; struct node *right; }node; void insertNode(node *h, int data){ node *newNode = (node*)malloc(sizeof(node)); newNode->data = data; node *temp = h; while(temp->right != NULL){ temp = temp->right; } newNode->left = temp; newNode->right = temp->right; temp->right = newNode; } void deleteNode(node *h){ if(h->right == NULL){ printf("list is empty!\n"); return; } node *temp = h->right; while(temp->right != NULL){ temp = temp->right; } node *pre = temp->left; pre->right = temp->right; free(temp); } void printList(node *h){ if(h->right == NULL){ printf("list is empty!\n"); return; } node *temp = h->right; printf("List = [ "); while(temp != NULL){ printf("%d ", temp->data); temp = temp->right; } printf("]"); } void main(){ node *h = (node*)malloc(sizeof(node)); h->left = NULL; h->right = NULL; insertNode(h, 25); insertNode(h, 30); insertNode(h, 35); insertNode(h, 40); printList(h); } | cs |