2017-09-24 1 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

関連する問題