Schreiben und Drucken zusätzlicher 0 in sortierte Dateien und Schneiden von Knoten (einzig verknüpfte Liste) aus dem Ende C ++

StackOverflow https://stackoverflow.com/questions/5857914

Frage

Das mag irgendwie vage erscheinen, so wirklich leid. Ich schreibe in eine Datei und drucke in eine Konsole die sortierten Knoten in dieser einzig verknüpften Liste. Leider druckt und schreibt es in der Sortierliste sowohl in der Sortierliste vorne zusätzliche 0 und senkt einen Wert vom Ende. Hier ist der Code:

void SLLIntStorage::Read(istream& r)
{
    char c[13];
    r >> c;
    r >> numberOfInts;

    head = new Node;
    head->next = NULL;
    tail = head;
    r >> head->data;

    for (int i = 0; i < numberOfInts; i++)
    {
        Node* newNode = new Node;
        r >> newNode->data;

        if(_sortRead)
        {
            if(newNode->data > tail->data)
            {
                tail->next = newNode;
                tail = newNode;
            }
            else if(head->data > newNode->data)
            {
                newNode->next = head;
                head = newNode;
            }
            else
            {
                current = head;

                while(current->next != NULL)
                {
                    if(current->next->data > newNode->data)
                    {
                        newNode->next = current->next;
                        current->next = newNode;
                        break;
                    }
                    else
                    {
                        current = current->next;
                    }
                }
            }
        }
        else
        {
            tail->next = newNode;
            tail = newNode;
        }
    }
    print();
}

void SLLIntStorage::Write(ostream& w)
{
    current = head;

    for(int i = 0; i < numberOfInts; i++)
    {
        w << current->data << endl;

        if (current->next != NULL)
            current = current->next;
    }
}
void SLLIntStorage::print()
{
    current = head;

    for(int i = 0; i < numberOfInts; i++)
    {
        cout << current->data << endl;
        //system("pause");
        if(current->next != NULL)
        {
            current = current->next;
        }
    }
}

Datei Beispiel: 0 0 1 2 2 3 ........ 9995 9996 9996 9998 // soll hier ein weiterer 9998 sein

War es hilfreich?

Lösung

Es scheint, dass Sie einen Eintrag zu viel gelesen haben. Sie haben zuerst einen Eintrag in der Zeile gelesen r >> head->data; Kurz vor dem for-Schleife. Dann lesen Sie eine zusätzliche numberOfInts Einträge in der for-Loop für insgesamt numberOfInts+1 Einträge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top