在java中,如何按字母顺序将节点添加到单链表中?

在java中,如何按字母顺序将节点添加到单链表中?,java,singly-linked-list,Java,Singly Linked List,这是我的中间Java类的一个赋值问题。我应该使用链表制作一个“字典”,而不使用内置的add方法。我无法按字母顺序添加节点。在列表中添加或预先添加每个节点都没有问题,但这不是问题的目的。该程序应该能够以字母升序和降序(两个单独的JOptionPane菜单选项)显示单词列表(及其含义)。事实证明……很难。以下是我的添加方法: void add(WordMeaning wm) { WordMeaningNode word = new WordMeaningNode(wm); WordM

这是我的中间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();
    }
}
void add(单词意思为wm)
{
WordMeaningNode word=新的WordMeaningNode(wm);
WordMeaningNode-current,prev;
尝试
{
如果(wmn==null)
{
wmn=单词;
}
其他的
{
电流=wmn;
prev=null;
while(current.next!=null)
{
prev=当前值;
当前=当前。下一步;
}
if(word.wm.getWord().compareTignoreCase(current.wm.getWord())<0)
{
word.next=current.next;
current.next=单词;
}
else如果(word.wm.getWord().compareTignoreCase(current.wm.getWord())>0)
{
prev=当前值;
current.next=单词;
}
}
}
捕获(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循环跳到链接列表的末尾。在这一端,您将尝试确定在何处插入或附加节点(如果您提到的话)

您要做的是跳到插入点(查找后跟比要插入的节点大的节点的节点)

您需要类似(伪代码,因为这是一个赋值):


那好吧。你试过什么?自己一步一步地完成代码;它有什么作用?我将为您节省一些时间,并告诉您,您的while循环目前在列表中一路迭代,但实际上没有做任何事情—请检查括号。您应该在列表中反复检查给定单词与当前单词和下一个单词。如果这个单词在当前单词之后和下一个单词之前,你知道它在列表中的位置。它仍然会给我相同的结果。当我在订单库中输入3个单词时,只打印库。当我把>改为它时,结果也是一样,但当我问这个问题时,截止日期已经过去了(截止时间是晚上11:55)。以上是我提交的部分内容。其他大部分都还可以,但这部分我不太明白。问这个问题只是为了对这种类型的问题/场景有一个正确的参考(可能应该在问题中说清楚,嗯?)@MichaelO'Reggio,你在问题中列出的代码确实包含功能部分,你需要重新排列它们以获得排序行为。
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
}