---リストソートアルゴリズムと反転リング解析

1.リバースリスト

  考え:フォワードリスト、ノードが削除されるたびに横断し、次にヘッドインサートノードように挿入され、逆にすることができ

 

2.分析リング

  アイデア:、リストをトラバースし、次いで、移動するノード時間へのポインタを二つのポインタを定義するために、別の2つのノードポインタを移動するための時間は、環内にリスト場合、2つのポインタが同じ値の場合を持っている必要があり、そうでなければ、反復が正常に完了しました。

 

  1つの#include <iostreamの>
   2  
  3  使用して 名前空間STDを、
  4  
  5  構造体ノード
   6  {
   7      構造体ノード* 次回。
  8      int型のデータ。
  9  }。
10  
11ノード* createNode(INT X)
 12  {
 13      ノード*はP = NULL;
14      
15      P = 新しいノード。
16      P->次= NULL;
17      P->データ=のX。
18      
19      リターンP;
20  }
 21  
22  空隙にaddNode(ノード**ヘッド、ノード*のP)
 23  {
 24      ノード*のTEMP = NULL;
25      であれば(*ヘッド== NULL)
 26      {
 27          *ヘッド= P。
28      }
 29      他の
30      {
 31          TEMP = * ヘッド。
32          ながら(!temp->次= NULL)
 33          {
 34              TEMP = temp-> 次。
35          }
 36         temp->次= P;
37      }
 38  }
 39  
40  空隙 showList(ノード* ヘッド)
 41  {
 42      ながら(!ヘッド= NULL)
 43      {
 44          COUT <<頭部>データ<< "   " 45          ヘッド=頭部> 次。
46      }
 47      COUT << ENDL。
48  }
 49  
50  ボイドスワップ(INT&A、INTB)
 51  {
 52     int型 TMP = B;
53      B = 54      = TMP。
55  }
 56  
57  // 链表反转
58ノード*リバース(ノード* ヘッド)
 59  {
 60      ノード* PCUR = NULL;
61      ノード* pNext = NULL;
62      
63      であれば(ヘッド== NULL ||頭部>次== NULL)
 64      {
 65          リターンヘッド。
66      }
 67      
68      PCUR =頭部> 次。
69      頭部>次=ヌル;
70      
71      ながら(!PCUR = NULL)
 72      {
 73          pNext = pCur-> 次。
74          pCur->次= ヘッド。
75          ヘッド= PCUR。
76          PCUR = pNext。
77      }
 78      
79      リターンヘッド。
80  }
 81  
82  // 链表是否成环
83  BOOL isCirCle(ノード* ヘッド)
 84  {
 85      ブール bIsCirCle = 86     ノード*たpFAST = NULL;
87      ノード* pSlow = NULL;
88      
89      であれば(ヘッド== NULL ||頭部> ==次NULL)
 90      {
 91          リターンbIsCirCle。
92      }
 93      
94      たpFAST = ヘッド。
95      pSlow = ヘッド。
96      ながら(!pFast->次= NULL && pFast->ネクスト>次= NULL)
 97      {
 98          たpFAST = pFast->ネクスト> 次。
99          pSlow = pSlow-> 次。
100          
101          もし(たpFAST == pSlow)
 102          {
 103              bIsCirCle = 104              ブレーク105          }
 106      }
 107      
108      リターンbIsCirCle。
109  }
 110  
111  INT メイン()
 112  {
 113      ノード*ヘッド= NULL;
114      
115      にaddNode(&ヘッド、createNode(2 ))。
116      にaddNode(&ヘッド、createNode(5 ))。
117      にaddNode(&ヘッド、createNode(7 ))。
118      にaddNode(&ヘッド、createNode(4 ))。
119      にaddNode(&ヘッド、createNode(6 ))。
120      にaddNode(&ヘッド、createNode(3 ))。
121      にaddNode(&ヘッド、createNode(1 ))。
122      にaddNode(&ヘッド、createNode(9 ))。
123      にaddNode(&ヘッド、createNode(8 ))。
124  
125      COUT << " 並べ替えの前に:" << ENDL。
126      showList(ヘッド)
127      
128      // ListSort_1(&ヘッド)
129      //ListSort_2(&ヘッド)。
130      ListSort_4(&ヘッド)
131      
132      COUT << " ソート後:" << ENDL。
133      showList(ヘッド)
134      
135      COUT << " 戻す:" << ENDL。
136      showList(逆(ヘッド))。
137      
138      COUT << " リストが円である:" << isCirCle(ヘッド)<< ENDL。
139  
140      しばらく1 )。
141      戻り 0 ;

 

おすすめ

転載: www.cnblogs.com/chusiyong/p/11325107.html