码迷,mamicode.com
首页 > 其他好文 > 详细

双向链表

时间:2015-10-08 23:07:14      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:


  1. // list.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <iostream>
  5. using namespace std;
  6. typedef struct list_node {
  7. int data;
  8. list_node *left;
  9. list_node *right;
  10. } Node;
  11. Node *create_node(int data)
  12. {
  13. Node *node = new Node();
  14. node->data = data;
  15. node->left = node->right = NULL;
  16. return node;
  17. }
  18. void delete_node( Node * p )
  19. {
  20. delete p;
  21. p = NULL ;
  22. }
  23. void insert_tail(Node *root , int data)
  24. {
  25. Node *node = create_node( data );
  26. Node *last_node = root;
  27. while(last_node->right != NULL) last_node = last_node->right;
  28. last_node->right = node;
  29. node->left = last_node;
  30. }
  31. Node *find_node(Node *root , int data )
  32. {
  33. Node *node = root ;
  34. while(node != NULL) {
  35. if( data == node->data ) {
  36. return node;
  37. }
  38. node = node->right;
  39. }
  40. return NULL;
  41. }
  42. void insert_back_node(Node *root, int dat , int data )
  43. {
  44. Node *node = find_node(root,dat);
  45. if( node == NULL || node->left == NULL ) return;
  46. Node *new_node = create_node( data );
  47. node->left->right = new_node;
  48. new_node->right = node;
  49. }
  50. void insert_front_node(Node *root, int dat , int data )
  51. {
  52. Node *node = find_node(root,dat);
  53. if( node == NULL ) return;
  54. Node *new_node = create_node( data );
  55. new_node->right = node->right;
  56. new_node->left = node;
  57. node->right = new_node;
  58. }
  59. void remote_node ( Node *root,int data )
  60. {
  61. Node *node = find_node ( root , data );
  62. if( node == NULL ) {
  63. return ;
  64. } else if ( node->left == NULL ) {
  65. node->right->left = NULL;
  66. } else if ( node->right == NULL ) {
  67. node->left->right = NULL ;
  68. } else {
  69. node->left->right = node->right;
  70. node->right->left = node->left;
  71. }
  72. delete_node( node );
  73. }
  74. void traversal( Node *root )
  75. {
  76. Node *last_node = root;
  77. do{
  78. cout<<last_node->data<<endl ;
  79. last_node = last_node->right;
  80. } while(last_node != NULL ) ;
  81. }
  82. int main(int argc, char* argv[])
  83. {
  84. Node *root = create_node(1);
  85. insert_tail(root,4);
  86. insert_tail(root,5);
  87. insert_tail(root,800);
  88. insert_tail(root,6);
  89. insert_tail(root,7);
  90. Node *p = find_node(root,5);
  91. cout << p <<endl;
  92. if(p!=NULL) cout<<p->data <<endl;
  93. insert_back_node(root,5,20);
  94. insert_front_node(root,1,30);
  95. remote_node ( root , 6 ) ;
  96. traversal( root );
  97. return 0;
  98. }





双向链表

标签:

原文地址:http://www.cnblogs.com/fysola/p/4862563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!