मैं सूची को उल्टे क्रम में प्रिंट करना चाहता हूं और साथ ही सूची आइटम को एक-एक करके हटा देना चाहता हूं और अंत में सूची खाली होनी चाहिए।

मेरा आउटपुट उस स्थिति में आवश्यकता के अनुसार नहीं है:

मैं Head->temp को temp int और return को RemoveHead() फ़ंक्शन में असाइन करने का प्रयास कर रहा हूं। लेकिन, मैं सक्षम नहीं हूं क्योंकि यह एक त्रुटि दे रहा है जो Invalid conversion from int to NodePtr है। साथ ही, L1.RemoveHead() में main() फ़ंक्शन भी काम नहीं कर रहा है और L1.Print() प्रिंट नहीं कर रहा है "List is empty." जो कि int main() की अंतिम पंक्ति है।

यह मेरा आउटपुट है:

===== Testing Step-1 =====
Testing default constructor...
List is empty.

Testing AddHead()...
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0

Testing IsEmpty() and RemoveHead()...

और यह आउटपुट होना चाहिए:

===== Testing Step-1 =====
Testing default constructor...
List is empty.

Testing AddHead()...
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0

Testing IsEmpty() and RemoveHead()...
9 8 7 6 5 4 3 2 1 0
List is empty.

यह मेरी प्रोग्रामिंग है:

int main()
{ 
    cout << "===== Testing Step-1 =====\n";
    cout << "Testing default constructor...\n";
    LinkedList L1;
    L1.Print(); // should be empty
    cout<<"\nTesting AddHead()...\n";
    for(int i=0; i<10; i++){
        cout << i << ' ';
        L1.AddHead(i);
    }
    cout << endl;
    L1.Print();
    while(!L1.IsEmpty())
        cout << L1.RemoveHead()<< ' '; 
    cout << endl; 
    L1.Print();
}

void LinkedList::AddHead(int Item)
{ 
    NodePtr newnode;
    newnode = new Node;
    newnode->Item = Item;
    newnode->Next = Head;
    Head = newnode;
}

int LinkedList::RemoveHead()
{
    if(Head==NULL)
    {
        cerr << "Error Occured. " << endl;
        exit(1);
    }
    else
    {       
        NodePtr temp;
        temp->Item = Head->Item;
        temp = Head;
        Head = Head->Next;
        delete temp;
        return temp;
    }
}
bool LinkedList::IsEmpty()
{
    return Head==NULL;
}

void LinkedList::Print()
{
    if (Head==0)
    {
        cout << "Empty error ." ;
    }
    else
    {
        NodePtr crnt;
        crnt = Head;
        while(crnt!= NULL)
        {
        cout << crnt->Item << " ";
        crnt = crnt->Next;
        }
    cout << endl;
    }
}   
-1
muzzi 25 अप्रैल 2018, 08:49

1 उत्तर

सबसे बढ़िया उत्तर

LinkedList::RemoveHead() में आप temp NodePtr पॉइंटर द्वारा बताए गए इंस्टेंस को डिलीट करने के बाद एक्सेस नहीं कर सकते। आपको पूर्णांक परिणाम को एक अतिरिक्त चर में सहेजने की आवश्यकता है:

int LinkedList::RemoveHead()
{
    if (! Head)
    {
        cerr << "Error Occured. " << endl;
        exit(1);
    }
    else
    {
        int result = Head->Item;
        NodePtr temp = Head;
        Head = Head->Next;
        delete temp;
        return result;
    }
}
1
Marco Pantaleoni 25 अप्रैल 2018, 09:35