請求
- リンクリストをリバース
- ノードの値を変更しません
例
- 頭部> 1-> 2-> 3-> 4-> 5-> NULL
- NULL <-1 <-2 <-3 <-4 <-5 <-head
思考
- 3つの補助ポインタが提供されています
実現
1の#include <iostreamの> 2 使用して 名前空間STDを、 3 4 構造体ListNode { 5 INT ヴァル。 6 ListNode * 次の; 7 ListNode(INT X):ヴァル(x)は、次の(NULL){} 8 }。 9 10 ListNode * createLinkedList(INT ARR []、int型N){ 11 であれば(N == 0 ) 12 リターンNULL。 13 ListNode *ヘッド= 新しい ListNode(ARR [ 0 ])。 14 ListNode * curNode = ヘッド。 15 のために(INT iが= 1 ; iが<N; I ++ ){ 16 curNode->次= 新しいListNode(ARRは、[I])。 17 curNode = curNode-> 次。 18 } 19 リターンヘッド。 20 } 21 22 空隙 printLinkedList(ListNode * ヘッド){ 23 ListNode * curNode = ヘッド。 24 一方(curNode!= NULL){ 25 COUT << curNode->ヴァル<< " - > "; 26 curNode = curNode-> 次。 27 } 28 COUT << " NULL " << ENDL。 29 リターン; 30 } 31 32 空隙 deleteLinkedList(ListNode * ヘッド){ 33 ListNode * curNode = ヘッド。 34 一方(curNode!= NULL){ 35 ListNode * delNode = curNode。 36 curNode = curNode-> 次。 37 削除delNode。 38 } 39 リターン; 40 } 41 42 クラスソリューション{ 43 公共: 44 ListNode * reverseList(ListNode * ヘッド){ 45 46 ListNode *プリ= NULL; 47 ListNode * CUR = ヘッド。 48 一方(CUR!= NULL){ 49 ListNode *次= cur-> 次。 50 cur->次= プレ。 51 予備= CUR。 52 CUR = 次回。 53 } 54 リターン事前; 55 } 56 }。 57 58 INT メイン(){ 59 int型 ARR [] = { 1、2、3、4、5 }。 60 INT N = はsizeof(ARR)/ はsizeof(INT )。 61 62 ListNode *ヘッド= createLinkedList(ARR、N)。 63 printLinkedList(ヘッド) 64 65 ListNode * HEAD2 = ソリューション()reverseList(ヘッド)。 66 printLinkedList(HEAD2)。 67 68 deleteLinkedList(HEAD2)。 69 リターン 0 ; 70 }
関連
- 92リバースリンクされたリストII
- ソートされたリストからの削除83 Duplicateds
- 86パーティション一覧
- 328奇数偶数リンクリスト
- 2 2つの数値を追加します。
- 445の追加2つの数II