簡體   English   中英

如何在Java中按字母順序將節點添加到單鏈接列表中?

[英]How do I add nodes to a singly linked list alphabetically in java?

這是我的中級Java類的作業問題。 我應該使用鏈接列表來制作“字典”,而不使用內置的add方法。 我無法按字母順序添加節點。 我只是將每個節點追加或添加到列表中都沒有問題,但這不是問題所要的。 該程序應該能夠以字母升序和降序顯示單詞列表(及其含義)(兩個單獨的JOptionPane菜單選項)。 事實證明...很難。 這是我的添加方法:

void add(WordMeaning wm)
{
    WordMeaningNode word = new WordMeaningNode(wm);
    WordMeaningNode current, prev;

    try
    {
        if(wmn == null)
        {
            wmn = word;
        }
        else
        {
            current = wmn;
            prev = null;
            while(current.next != null)
            {
                prev = current;
                current = current.next;
            }
            if(word.wm.getWord().compareToIgnoreCase(current.wm.getWord()) < 0)
            {
                word.next = current.next;
                current.next = word;
            }
            else if(word.wm.getWord().compareToIgnoreCase(current.wm.getWord()) > 0)
            {
                prev = current;
                current.next = word;
            }
        }
    }
    catch(NullPointerException e)
    {
        e.printStackTrace();
    }
}

我確實知道,while循環下的if語句出了點問題。 我只是不知道是什么。 我還不夠好,還不知道怎么了(哈哈)。 我想知道是否應該先正常添加它們,然后再按字母順序對其進行排序。 如果是這樣,那我該怎么辦? 請保持溫柔。 ;)

我認為您可以先按升序添加所有單詞,然后再按所需順序(升序/降序)遍歷它們。 由於您已經具有與上一個和下一個節點的雙鏈表,因此迭代不成問題。 嘗試:

while(current.next != null)
        {
            prev = current;
            current = current.next;

            if(word.wm.getWord().compareToIgnoreCase(current.wm.getWord()) > 0)
            {
                word.next = current.next;
                current.next = word;
                break;  // break when correct position of word is found in ascending order.
            }
          /*  else if(word.wm.getWord().compareToIgnoreCase(current.wm.getWord()) > 0)
            {
                prev = current;
                current.next = word;
            }
          */  // No else condition is required
        }
}

您的while循環跳到鏈接列表的末尾。 為此,您嘗試確定在哪里插入或附加節點(如果您提到的話)。

您想要做的是跳到插入點(找到緊隨其后的節點的節點,該節點大於要插入的節點。)

您需要類似的東西(偽代碼,因為這是一個分配):

boolean found = false;
while (!found && current.next != null) {
    if (next word > word) {
        found = true;
    } else {
         prev = current;
         current = current.next;
    }
}
if (!found) {
    append to end of list
} else {
    insert before next
}

暫無
暫無

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

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