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 75 76 77
| #include <stdio.h> #include <stdlib.h> #include <malloc.h> #pragma once
typedef struct Node { int data; struct Node* Next; }Node;
typedef struct LinkedList { struct Node* head; // HEAD를 가르키는 Node 포인터 변수 struct Node* before; // 이전노드를 가르키는 Node 포인터 변수 struct Node* cur; // 현재 노드를 가르키는 Node 포인터 변수 };
void LInitialize(LinkedList* plist) { plist->head = (Node*)malloc(sizeof(Node)); // 동적 할당. plist->head->Next = NULL; // 더미노드를 가리키도록 함. }
void LInsert(LinkedList *plist, int data) { Node* nNode = (Node*)malloc(sizeof(Node)); // 신규 노드 생성 nNode->data = data; nNode->Next = plist->head->Next; plist->head->Next = nNode; }
void LFirst(LinkedList* plist) { if (plist->head->Next != NULL) { plist->before = plist->head; plist->cur = plist->head->Next; // 가장 첫번째로 생성된 노드를 가르킴 printf("%d", plist->cur->data); } }
void LNext(LinkedList* plist) { if (plist->cur->Next != NULL) { plist->before = plist->cur; plist->cur = plist->cur->Next; printf("%d", plist->cur->data); } }
void LDelete(LinkedList* plist) { printf("\n 데이터 삭제 %d ", plist->cur->data);// 삭제되는 노드의 데이터를 출력 plist->cur = plist->cur->Next;// 삭제하기 전에 Current를 다음 노드로 변경 free(plist->before->Next); // 노드 삭제 plist->before->Next = plist->cur; // 이전 노드가 연결이 끊어졌으므로, Current 노드(삭제한노드의 그 다음노드)와 연결 }
int main() { LinkedList list; LInitialize(&list); LInsert(&list, 11); // 노드 생성 LInsert(&list, 22); // 노드 생성 LInsert(&list, 33); // 노드 생성 LInsert(&list, 44); // 노드 생성 LInsert(&list, 55); // 노드 생성 LFirst(&list); LNext(&list); LDelete(&list); LNext(&list);
}
|