亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

優先鏈接隊列添加方法幫助

優先鏈接隊列添加方法幫助

陪伴而非守候 2021-11-03 16:22:11
我正在嘗試使用鏈接節點實現優先級隊列,并且除了 add 方法之外,我的所有方法都可以正常工作。add 方法的目的是將一個可比較的對象以正確的順序添加到隊列中。隊列的順序如下:優先級最高的節點是firstNode。任何關于我在嘗試中做錯了什么的幫助將不勝感激。public void add(T newEntry) {   if(newEntry == null) {       return;   }   if(isEmpty()) {       firstNode = new Node(newEntry);   } else {       Node currentNode = firstNode;       if(newEntry.compareTo(firstNode.data)<0) {           firstNode = new Node(newEntry, firstNode);           length++;           return;       } else {           while(currentNode.getNextNode() != null && newEntry.compareTo(currentNode.next.data) > 0) {                  currentNode = currentNode.next;                  currentNode.setNextNode(new Node(newEntry, currentNode.getNextNode()));           }       }   }   length++;   return;     } 
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

您至少有兩個問題,我已經在代碼注釋中指出:


public void add(T newEntry) {


   if(newEntry == null) {

       return;

   }


   if(isEmpty()) { 

      firstNode = new Node(newEntry);

   } else {

       Node currentNode = firstNode;

       if(newEntry.compareTo(firstNode.data)<0) {

// Here you're assigning a new value to firstNode, but not linking to the old

// firstNode. So you're losing the entire list.

           firstNode = new Node(newEntry, firstNode);

           length++;

           return;

       } else {

           while(currentNode.getNextNode() != null && newEntry.compareTo(currentNode.next.data) > 0) {

                  currentNode = currentNode.next;

// Here you're adding multiple new nodes to the list.

                  currentNode.setNextNode(new Node(newEntry, currentNode.getNextNode()));

           }

       }

   }

   length++;

   return;     

}

你可以很容易地簡化它:


public void add(T newEntry) {


   if(newEntry == null) {

       return;

   }

   Node newNode = new Node(newEntry);


   if(isEmpty()) { 

      firstNode = newNode;

   } else if (newNode.data < firstNode.data) {

      // make newNode point to the firstNode,

      // and then re-assign firstNode

      newNode.setNextNode(firstNode);

      firstNode = newNode;

   } else {

       Node currentNode = firstNode;

       Node nextNode = currentNode.getNextNode;

       while (nextNode != null && nextNode.data > newNode.data) {

           currentNode = nextNode;

           nextNode = currentNode.getNextNode;

       }

       // insert newNode between currentNode and nextNode

       newNode.setNextNode(nextNode);

       currentNode.setNextNode = newNode;

   }

   length++;

   return;     

}


查看完整回答
反對 回復 2021-11-03
  • 1 回答
  • 0 關注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號