-4

こんにちは... ii add 29->36->15->1としてC ++でリストを最後から最初に表示するリンクリストを作成したい私は1->15->36->29のようになりたかったこれは私が普通にやった

void DisplayNormal()
    {
        linkedlist *temp;
        temp = head;

        while (temp->next != NULL)
        {

            cout << "list Number : " << temp->ListNum << endl;
            cout << "Student Ceel Phone  : " << temp->number << endl;
            cout << "-------------------------------" << endl;
            temp = temp->next;
        }
        if (temp->next == NULL)
        {
            cout << "list Number : " << temp->ListNum << endl;
            cout << "Student Ceel Phone  : " << temp->number << endl;
            cout << "-------------------------------" << endl;
        }

    }
4

2 に答える 2

0

それを行う最善の方法は、表示の前後にリンクされたリストを逆にすることだと思います。これは、コピーはなく、元のリンクされたリストの方向を変更するためです。O(n) でリンクされたリストを反転し、O(n) のすべての要素を表示できます。これが、アルゴリズムの最終的な時間の複雑さが O(n) である理由です。

class Node
{
    Node *next;
    int val;
};

リンクされたリストのこの表現では、次のようにすることができます。

Node* reverseLinkedList(Node *head)
{
    Node *prev = NULL;
    Node *current = head;
    Node *next;
    while (current) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next; 
    }
    head = prev;
}

そして、あなたの完全な機能は次のとおりです。

void DisplayReversed(Node *head)
{
    reverseLinkedList(head);

    displayNormal(*head);

    reverseLinkedList(head);
}
于 2016-01-05T00:54:46.833 に答える