ps:もう2分おいたほうがいいです~~~私はこの偽のリンクリストについて泣いています
整数キーを持つリンクリストLが与えられた場合、絶対値が繰り返されるキー値ノードを削除する必要があります。つまり、各キー値Kに対して、絶対値がKに等しい最初のノードのみが予約されます。同時に、削除されたすべてのノードを別のリンクリストに保存する必要があります。たとえば、Lが21→-15→-15→-7→15の場合、重複排除されたリンクリスト21→-15→-7、および削除されたリンクリスト-15→15を出力する必要があります。
入力フォーマット:
LがNの整数最初の行アドレスの第1の入力ノードと正が与えられる(≤ 1 0 。5 、ノードの総数)。ノードのアドレスは非負の5ビット整数であり、空のアドレスNULLは-1で表されます。
次に、N行、各行は次の形式でノードを説明します。
地址 键值 下一个结点
どの地址
ノードのアドレスであり、键值
それは絶対値以下である。1 0 。4 整数、次のノードのアドレス。下一个结点
出力フォーマット:
重複除外されたリンクリストが最初に出力され、次に削除されたリンクリストが出力されます。各ノードは1行を占め、入力フォーマットに従って出力されます。
入力例:
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
出力例:
00100 21 23854
23854 -15 99999
99999 -7 -1
00000 -15 87654
87654 15 -1
改正后代码
#include <bits / stdc ++。h> using namespace std; int mapn [100005]; int a1 [100005]; int b1 [100005]; int a2 [100005]; int b2 [100005]; int m、m1、n、len1、len2、flag、flag1; struct nobe { int key、add; } x [100005]; int main(){ cin >> m >> n; int m1 = m; for(int i = 0; i <n; i ++){ int k; cin >> k; cin >> x [k] .key >> x [k] .add; } while(1){ if(!mapn [abs(x [m] .key)]){ a1 [len1] = x [m] .key; b1 [len1] = x [m] .add; len1 ++; b2 [len2-1] = x [m] .add; } その他{ if(!flag){flag1 = m; flag ++;} a2 [len2] = x [m] .key; b2 [len2] = x [m] .add; len2 ++; b1 [len1-1] = x [m] .add; } mapn [abs(x [m] .key)] ++; m = x [m] .add; if(m ==-1)break; } printf( "%05d"、m1); for(int i = 0; i <len1; i ++){ if(i == len1-1) cout << '' << a1 [i] << '' << "-1" << endl; else printf( "%d%05d \ n%05d"、a1 [i]、b1 [i]、b1 [i]); } printf( "%05d"、flag1); for(int i = 0; i <len2; i ++){ if(i == len2-1) cout << ' '<< a2 [i] <<' '<< "-1" << endl; そうしないと printf( "%d%05d \ n%05d"、a2 [i]、b2 [i]、b2 [i]); } 0を返します。 }