下面的代码用一个”哨兵“实现双链表,感觉很简洁,中间也有点绕,暂时实现,供学习之用
1static Node list_handle = 2{ 3 &list_handle,&list_handle, 4}; 5 6 7bool addNode(Node* node) 8{ 9 if (node == NULL) 10 { 11 return false; 12 } 13 14 Node* guard = &list_handle; 15 node->next = guard; 16 node->prev = guard->prev; 17 node->prev->next = node; 18 node->next->prev = node; 19 20} 21 22 23void removeNode(Node *node) 24{ 25 if (node == NULL) 26 { 27 return; 28 } 29 30 node->prev->next = node->next; 31 node->next->prev = node->prev; 32 node->prev = NULL; 33 node->next = NULL; 34} 35 36 37void travel() 38{ 39 for (Node *node = list_handle.next;node != &list_handle ; node = node->next) 40 { 41 //对每个节点所进行的操作,这里只是简单的打印 42 cout<< node->data <<""<<endl; 43 } 44}
使用方法
1int _tmain(int argc, _TCHAR* argv[]) 2{ 3 4 Node n1; 5 n1.data = 100; 6 7 Node n2; 8 n2.data = 200; 9 10 Node n3; 11 n3.data = 300; 12 13 addNode(&n1); 14 addNode(&n2); 15 addNode(&n3); 16 17 travel(); 18 19 removeNode(&n2); 20 21 travel(); 22 23 return 0; 24}
