프로그래밍/자료구조
기본 링크드리스트 활용
lee ho jun
2016. 6. 8. 22:47
반응형
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | #include <iostream> using namespace std; typedef int element; typedef struct ListNode { element data; struct ListNode *link; } ListNode; void insert_node(ListNode **Head, ListNode * p ,ListNode * NewNode) { if ((*Head) == NULL) { (*Head) = NewNode; } else if (p == NULL) { NewNode->link = (*Head); (*Head) = NewNode; } else { NewNode->link = p->link; p->link = NewNode; } } void remove_node(ListNode **Head, ListNode* p, ListNode *removed) { if (p == NULL) // Head 포인터를 변경 { (*Head) = (*Head)->link; } else p->link = removed->link; free(removed); } void display(ListNode *Head) { ListNode *tmp = Head; while (tmp != NULL) { cout << tmp->data << "->"; tmp = tmp->link; } cout << endl; } void re_display(ListNode *Head) { ListNode * tmp = Head; if(tmp != NULL) { cout << tmp->data << "->"; re_display(tmp->link); } } ListNode* search(ListNode *Head, int data) { ListNode *tmp = Head; while (tmp != NULL) { if (tmp->data == data) return tmp; tmp = tmp->link; } return NULL; } ListNode* contact(ListNode *Head1, ListNode *Head2) { ListNode *tmp=NULL; if (Head1 == NULL) return Head2; else if (Head2 = NULL) return Head1; else { tmp = Head1; while (tmp != NULL) tmp = tmp->link; tmp->link = Head2; return Head1; } } ListNode *reverse(ListNode *head) { ListNode *r, *p, *q; r = p = q = NULL; p = head; while (p != NULL) { r = q; q = p; p = p->link; q->link = r; } return q; } ListNode* CreateNode(int data) { ListNode* NewNode = (ListNode*)malloc(sizeof(ListNode)); NewNode->data = data; NewNode->link = NULL; return NewNode; } int main() { ListNode *Head = NULL; ListNode *tmp = NULL; insert_node(&Head, NULL, CreateNode(1)); insert_node(&Head, NULL, CreateNode(2)); insert_node(&Head, NULL, CreateNode(3)); display(Head); tmp =reverse(Head); display(tmp); return 0; } | cs |
반응형