2017-09-24 104 views
-3

我想做一個鏈表並同時排列所述鏈接列表,但我不能完全弄清楚如何讓代碼完全排序列表。鏈接列表排序不起作用

這裏是我的課:

class PayRoll{ 
private: 
    string EmployeeName; // employee name 
    double PayRate; // employee pay rate 
    double HoursWorked; // employee hours worked 
public: 
    void setRate(double); // set rate 
    void setName(string); // set name 
    void setHours(double); // set hours worked 
    string getName(){return EmployeeName;}; 
    double getHours(){return HoursWorked;}; 
    double getRate() {return PayRate;}; 
    double getPaid(){return (PayRate*HoursWorked);}; 

};

class PayRollList{ 
    private: 
     struct ListNode { 
      PayRoll p; 
      ListNode* next; 
     }; 
     ListNode *head; 
    public: 
     PayRollList() { head = nullptr; }; 
     void insert(string, double, double); // name, rate, hours 
     void printPayChecks(); // print name and total pay for all employees 
}; 

我認爲的主要問題是插入功能。數據的實現已經成功完成,所以我忽略了這一點。我無法讓這部分工作。

void PayRollList::insert(string EmpName, double rate, double hours){ 
ListNode* newNode = new ListNode; 

newNode->p.setName(EmpName); 
newNode->p.setRate(rate); 
newNode->p.setHours(hours); 
newNode->next = nullptr; 

ListNode* current = this->head; 
ListNode* temp; 

if (head == nullptr){ 
    this->head = newNode; } 
else { 
    current = this->head; 
    while (current->next != nullptr){ 
     if (newNode->p.getRate() < current->p.getRate() && this->head == current){ 
      temp = current; 
      this->head = newNode; 
      newNode->next = temp; 
      return; 
     } 
     else if (newNode->p.getRate() < current->p.getRate() && this->head != current){ 
      temp = current; 
      current = current->next; 
      newNode->next = current; 
      temp->next = newNode; 
      return; 
     } 
     else if (newNode->p.getRate() < current->p.getRate()){ 
      temp = current; 
      current = current->next; 
      newNode->next = current; 
      temp->next = newNode; 
      return; 
     } 
     else current = current->next; 
    } 
    current->next = newNode; 
} 

}

任何幫助將不勝感激!

回答

0

指針指針技巧是保持向後引用。你可以使用單深度指針始終引用完成相同的 - 比較>下一個元素,但你需要特殊的情況下,插入鏈表的第一個元素。

void PayRollList::insert(string EmpName, double rate, double hours){ 
    ListNode* newNode = new ListNode; 

    newNode->p.setName(EmpName); 
    newNode->p.setRate(rate); 
    newNode->p.setHours(hours); 
    newNode->next = nullptr; 

    ListNode** current = &(this->head); 
    while (*current != nullptr && (*current)->p.getRate() < newNode->p.getRate()) { 
     current = &((*current)->next); 
    } 
    newNode->next = *current; 
    *current = newNode; 
} 
+0

這工作!你有沒有可能解釋雙指針在這種情況下如何工作? –

+0

https://ibb.co/e5ZNZQ 由於電流是一個指針到指針,它指向「下一個」指針* *內的ListNode類的每個實例。 – jdizzle