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、INT&B) 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 ;