リンクされたリストは、メモリ内に必ずしも隣接していない構造の一連の構成します。私たちは、それぞれの構造は整数が含まれていると key
し、 Next
次の構造体へのポインタを。今すぐリンクリストを与え、あなたは昇順で、そのキーの値に応じて構造体を並べ替えることになっています。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、正含ま N(<)と、ヘッドノードのアドレス Nがメモリ内のノードとノードのアドレスの総数が5桁の正の整数であるが。NULLは、で表されます - 。
次いで、 N行は、それぞれのフォーマットでノードを説明し、次のとおりです。
Address Key Next
ここで、 Address
メモリ内のノードのアドレスであり、 Key
[の整数である- ]、及び Next
次のノードのアドレスです。すべてのキーが異なっていると何のサイクルは、ヘッドノードから始まるリンクリストに存在しないことが保証されています。
出力仕様:
各テストケースのために、出力フォーマットは入力と同じである Nがリスト内のノードの総数であり、すべてのノードが順にソートされなければなりません。
サンプル入力:
5 00001
11111 100 -1
00001 0 22222
33333 100000 11111
12345 -1 33333
22222 1000 12345
サンプル出力:
5 12345
12345 -1 00001
00001 0 11111
11111 100 22222
22222 1000 33333
33333 100000 -1
注意点その
(1)タイトル与えられたノードかもしれない無効なノードリスト
(2)最後のテストは、最初のテストポイントのアドレスであった - 1 - 1、0の出力のみ今回、空のリストである場合
(3)出力ノードアドレスに加えて--1は十分に高い0で、5桁の数字を持っていなければなりません。だから、アドレス - 1特殊な文を出力します
1の#include <iostreamの> 2の#include <地図> 3 使用して 名前空間STDを、 4 INT メイン() 5 { 6 INT N、頭部、MAXV = - 1000000 。 7 CIN >> N >> ヘッド。 8 地図< 整数、整数 > 値。 9 マップ< int型、対< INT、INT >> データ。 10 のために(int型 I = 0 ; iがNを<++ I) 11 { 12は、 int型、addrが、ヴァル、次に 13は CINのADDR >> >>ヴァル;次に 14 data.insert(make_pair(ADDR、make_pair(ヴァル、NEXT))); 15 } 16 IF(Data.Find(ヘッド)= = data.end()) 。17 { 18で COUT << 0 << " " - << 1 << ; ENDL 19。 リターン 0 ; // リストが空である 20である } 21は 、一方(ヘッド=! - 1。 )// 反復データでは、データはリストに見出される 22 { 23 value.insert(make_pair(データ【ヘッド】1次回、頭部))。 24 ヘッド= データ[頭部] .second。 25 } 26 のprintf(" %D%05D \ n "、value.size())(value.begin - > 秒)。 27 のための(自動PTR = value.begin()!= ptrをvalue.end(); ++ PTR) 28 { 29 であれば(PTR == value.begin()) 30 のprintf(" %05D%のD "、PTR - >第二、ptr-> 最初の); 31 他の 32 のprintf(" %05Dのn \%05D%dの"ptr->第二、ptr->第二、ptr-> 最初の); 33 } 34 のprintf(" %d個の\ n "、 - 1 ); 35 リターン 0 ; 36 }