Bei einer verknüpften Liste L mit Ganzzahlschlüsseln müssen Sie die Schlüsselwertknoten löschen, an denen sich der Absolutwert wiederholt. Das heißt, für jeden Schlüsselwert K ist nur der erste Knoten reserviert, dessen absoluter Wert gleich K ist. Gleichzeitig müssen alle gelöschten Knoten in einer anderen verknüpften Liste gespeichert werden. Wenn beispielsweise L 21 → -15 → -15 → -7 → 15 ist, müssen Sie die deduplizierte verknüpfte Liste 21 → -15 → -7 und die gelöschte verknüpfte Liste -15 → 15 ausgeben.
Eingabeformat:
L ist die erste Eingangsknoten der ersten Reihenadresse und eine positive ganze Zahl N gegeben ( ≤ . 1 0 . 5 , die Gesamtzahl der Knoten). Die Adresse eines Knotens ist eine nicht negative 5-Bit-Ganzzahl, und die leere Adresse NULL wird durch -1 dargestellt.
Dann N Zeilen, jede Zeile beschreibt einen Knoten im folgenden Format:
地址 键值 下一个结点
Welches 地址
ist die Adresse des Knotens aus , 键值
ist es nicht mehr als der absolute Wert . 1 0 . 4 ganze Zahl ist , die Adresse des nächsten Knotens.下一个结点
Ausgabeformat:
Die de-duplizierte verknüpfte Liste wird zuerst ausgegeben, und dann wird die gelöschte verknüpfte Liste ausgegeben. Jeder Knoten belegt eine Zeile und wird gemäß dem Eingabeformat ausgegeben.
Beispieleingabe:
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
Beispielausgabe:
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; für (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; } else { 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); für (int i = 0; i <len1; i ++) { if (i == len1-1) cout << '' << a1 [i] << '' << "- 1" << endl; sonst printf ("% d% 05d \ n% 05d", a1 [i], b1 [i], b1 [i]); } printf ("% 05d", flag1); für (int i = 0; i <len2; i ++) { if (i == len2-1) cout << ' '<< a2 [i] <<' '<< "- 1" << endl; sonst printf ("% d% 05d \ n% 05d", a2 [i], b2 [i], b2 [i]); } return 0; }}