簡體   English   中英

雙向鏈表,我似乎可以創建一個新節點,我離我有多遠?

[英]doubly linked list, i can seem to create a new Node, How far off am i?

該程序假設是一個雙向鏈表,提示用戶

1.Insert" "2. Delete"<<endl<< "3. Display"<<endl<< "4. Sum"<<endl<< "5. Average"<<endl<< "6. Exit" From the list above what would you like to do next?"

問題:在執行時,在我為“值”輸入雙精度值后,程序凍結了一點然后退出

//- 輸入提示

cout<<"\\nWhat value would you like to insert to the list: "; cin>>value; l.insertAtEnd(value); break;

//--- 函數定義 ---

 void List::insertAtEnd(double & x) { List::NodePointer ptr; ptr = new List::Node(last, x ); last->next = ptr; last = ptr; count ++; sum += x; }

//--- 原型

包括

    // #include"Node.h" 
>     
>     using namespace std;
>     
>     #ifndef LIST
>     #define LIST
>     
>     typedef double ElementType;
>     
>     class List
>     {
>         public:
>             ...
>             void insertAtEnd(ElementType & x); //insert a value x on the end of the list
>             ...
>         
>     private:
>             ...
>             
>             class Node
>             {
>                 public:
>                 ElementType data;
>                 Node *prev;
>                 Node *next;
>                 //--- Node constructor
>                 /*-------------------------------------------------------------------
>                     Precondition:  None.
>                     Postcondition: A Node has been constructed with value in its data 
>                         part and its next part set to link (default 0).
>                     -------------------------------------------------------------------*/
>                 Node(Node *prevNodePtr,ElementType value, Node *link = 0)
>     
>                     : prev(prevNodePtr) ,data(value), next(link)
>                 {}
>             };
>     
>             typedef Node * NodePointer;
>             NodePointer last;
>             NodePointer first;
>     
>     };
>     
>     ostream & operator<<(ostream & out, const List & s);
>     
>     #endif // !LIST

請幫忙...

我不認為你離得很遠。 我看到的主要問題是您沒有處理List類中的first指針。

當您像這樣向列表末尾添加一個值時,要添加到列表中的第一個值是一種特殊情況,因為您還必須更新第first指針。 您的代碼不會這樣做。

您的代碼的另一個不尋常之處是您擁有這些countsum變量。 似乎您正在嘗試保持列表長度和列表總和的運行總數。 這並沒有錯,但這是一件不尋常的事情。 通常,您會在需要時計算這些值,而不是一直計算。 此外,如果您繼續這樣做,那么您需要將countsum添加到您的列表類中。 目前,您在一個變量中有一個列表,它是不同變量中的長度和總和。 這是糟糕的設計,因為變量之間沒有密切關聯。 想象一下,你有兩個列表。 那么你將如何保持countsum變量的更新? 就我個人而言,我只想刪除處理countsum的代碼,只需在需要時計算這些數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM