鏈表“逆置”的2種方法

 

  1. #include <iostream> 
  2. using namespace std; 
  3.  
  4.  
  5. struct list 
  6.     int data; 
  7.     list *next; 
  8. }; 
  9.  list *head=new list; 
  10.  list *tail=head; 
  11.  
  12.  void add(int n) 
  13.  { 
  14.      list *p=new list; 
  15.      memset(p,0,sizeof(list)); 
  16.     tail->next=p; 
  17.     p->data=n; 
  18.     tail=p; 
  19.  } 
  20.  void print() 
  21.  { 
  22.      list *p=head->next; 
  23.      while(p) 
  24.      { 
  25.          cout<<p->data<<endl; 
  26.          p=p->next; 
  27.      } 
  28.  } 
  29.  void printtail() 
  30.  { 
  31.      list *p=tail; 
  32.      while(p->next) 
  33.      { 
  34.          cout<<p->data<<endl; 
  35.          p=p->next; 
  36.      } 
  37.  } 
  38.  void nizhi1() 
  39.  { 
  40.     int sum=0; 
  41.     list *p=head->next; 
  42.     while(p){p=p->next;sum++;} 
  43.  
  44.     for (int i=0;i<sum/2;i++) 
  45.     { 
  46.         p=head->next; 
  47.         for (int j=0;j<i;j++ )  //j<i 
  48.         { 
  49.             p=p->next; 
  50.  
  51.         } 
  52.         cout<<"l:"<<p->data<<endl; 
  53.         list *r=head->next; 
  54.         for (int jj=0;jj<sum-i-1;jj++)  //-1 
  55.         { 
  56.             r=r->next; 
  57.         } 
  58.             cout<<"r:"<<r->data<<endl; 
  59.         int temp=p->data; 
  60.         p->data=r->data; 
  61.         r->data=temp; 
  62.     } 
  63.     } 
  64. void nizhi2() 
  65. int sum =0;      //新建一個動態數組存放鏈表地址 address[0]存放head地址 
  66. list *p=head; 
  67. while(p) {sum++;p=p->next;} 
  68. list  **address=new list *[sum]; 
  69. memset(address,0,sizeof(address)); 
  70. p=head; 
  71. for (int i=0;i<sum;i++) 
  72.     address[i]=p; 
  73.     p=p->next; 
  74.  
  75. cout<<"sum:"<<sum<<endl; 
  76. p=head; 
  77. p->next=0; 
  78. for (i=1;i<sum;i++) 
  79.     address[i]->next=address[i-1]; 
  80.  
  81.  delete [] address; 
  82.  
  83.   
  84. int main() 
  85. add(1); 
  86. add(2); 
  87. add(3); 
  88. add(4); 
  89. add(5); 
  90. print(); 
  91. cout<<endl; 
  92. nizhi1(); 
  93. print(); 
  94. nizhi2(); 
  95. cout<<endl; 
  96. printtail(); 
  97. return 0; 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章