PAT Grade A 1074 Umkehren der verknüpften Liste (25 Punkte) | C ++ - Implementierung

1. Titelbeschreibung

Ursprünglicher Titellink
Fügen Sie hier eine Bildbeschreibung ein

Eingabespezifikation:

Fügen Sie hier eine Bildbeschreibung ein

Ausgabespezifikation:

Geben Sie für jeden Fall die resultierende geordnete verknüpfte Liste aus. Jeder Knoten belegt eine Zeile und wird im gleichen Format wie in der Eingabe gedruckt.

Beispieleingabe:

00100 6 4
00000 4 99999
00100 1
12309 68237 6 -1
33218 3 00000
99999 5 68237 12309
2 33218

Beispielausgabe:

00000 4 33218
33218 3 12309 12309
2 00100
00100 1 99999
99999 5 68237
68237 6 -1

Zwei Ideen zur Problemlösung

Fragen zur Umkehrung verknüpfter Listen, ähnlich wie bei allgemeinen Fragen zu verknüpften Listen, erstellen wir eine Struktur zur Darstellung des Knotens, der Daten enthält und auf die Adresse verweist. Verwenden Sie eine while-Schleife, um eine verknüpfte Liste zu erstellen, speichern Sie die Adresse in vector <int> add und erstellen Sie dann eine Schleife, um alle K Elemente umzudrehen, dh die Adressen neu anzuordnen und schließlich auszugeben. Diese Art von Fragen zu verknüpften Listen muss mehr gestellt werden, und es wird sich gut anfühlen, wenn Sie mehr tun.

Drei, AC-Code

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 100001;
struct Node
{
    
    
    int data, next;
}node[maxn];
int main()
{
    
    
    int first, N, K, tmp;
    vector<int> add;
    scanf("%d%d%d", &first, &N, &K);
    for(int i=0; i<N; i++)
    {
    
    
        scanf("%d", &tmp);
        scanf("%d%d", &node[tmp].data, &node[tmp].next);
    }
    tmp = first;
    while(tmp != -1)
    {
    
    
        add.push_back(tmp);
        tmp = node[tmp].next;
    }
    int sze = add.size();
    for(int i=0; i+K<=sze; i += K)    //有效链表元素数为size
    {
    
    
        reverse(add.begin()+i, add.begin()+i+K);
    }
    for(int j=0; j<sze-1; j++)
    {
    
    
        printf("%05d %d %05d\n", add[j], node[add[j]].data, add[j+1]);
    }
    printf("%05d %d -1\n", add[sze-1], node[add[sze-1]].data);
    return 0;
}

Ich denke du magst

Origin blog.csdn.net/weixin_42393947/article/details/108723684
Empfohlen
Rangfolge