插入双链表

时间:2012-01-24 20:12:16

标签: java doubly-linked-list

我想以相反的顺序将字符串插入到双向链表中。但我不知道如何以相反的顺序维护插入顺序。

这是我的以下代码。

theList.insertReverseLexicographicalOrder("B");
theList.insertReverseLexicographicalOrder("A");
theList.insertReverseLexicographicalOrder("H");
theList.insertReverseLexicographicalOrder("D");
theList.insertReverseLexicographicalOrder("E");

public void insertReverseLexicographicalOrder(String dd) {
    Link newLink = new Link(dd);
    if (isEmpty()){
        last = newLink;
    }           
        first.previous = newLink;
    }
    newLink.next = first;
    first = newLink;
}

根据我的解决方案,一些代码会对任何建议表示赞赏。

3 个答案:

答案 0 :(得分:1)

嗯,你认为它已经是相反的顺序,所以你需要某种循环,直到找到它应该去的地方......即

Z,Y,X,W,L,K,A

如果你要插入M,那么你应该循环直到找到L,字典大于M,然后将其插入那里。因为节点有先前的指针,所以插入不应该太难以在你自己的

上找到

答案 1 :(得分:0)

如何将节点插入链表:

  1. 如果列表为空,则新节点将成为第一个,如果我们跟踪它,也是最后一个
  2. 否则找到插入的位置,有三种可能性,
    a)必须在第一个之前插入新节点 b)必须在最后一个之后插入新节点 c)必须在两个现有节点之间插入新节点
  3. 更新相应的引用,可能是firstlast以及某些nextprevious字段,具体取决于必须插入的位置
  4. if (first == null) {
        // the list is empty so far
    } else
    

    要找到位置,首先将数据与第一个节点的数据进行比较,看是否必须在第一个节点之前插入数据。

    if (newLink.iData.compareTo(first.iData) > 0) {
        // put newLink before first
    } else {
    

    您必须关注某个列表节点。从头开始按照列表进行操作,直至到达插入点:

        Link focus = first; // focus first node
        while(focus.next != null && newLink.iData.compareTo(focus.next.iData) < 0) {
            focus = focus.next;
        }
        // now you have to insert the new value behind focus, left as exercise
        if (focus.next == null) {
            // newLink becomes the last node in the list
        } else {
           // newLink has to be inserted between focus and focus.next
        }
    }
    

    然后插入。注意边缘情况,前端和末端的插入略有不同。

答案 2 :(得分:0)

您需要查看列表,比较每个元素。当您找到要插入的元素之后的元素时停止。我建议你在节点类中实现compareTo方法:http://www.javapractices.com/topic/TopicAction.do?Id=10 并用它来进行比较

祝你好运。