7-3 Deduplizierung der verknüpften Liste (25 Punkte)

ps: Es ist besser, mir noch zwei Minuten zu geben ~~~ Ich weine über diese gefälschte verknüpfte Liste
 

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; 
}}

  

 

Ich denke du magst

Origin www.cnblogs.com/asunayi/p/12757586.html
Empfohlen
Rangfolge