我想以相反的顺序将字符串插入到双向链表中。但我不知道如何以相反的顺序维护插入顺序。
这是我的以下代码。
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;
}
根据我的解决方案,一些代码会对任何建议表示赞赏。
答案 0 :(得分:1)
嗯,你认为它已经是相反的顺序,所以你需要某种循环,直到找到它应该去的地方......即
Z,Y,X,W,L,K,A
如果你要插入M,那么你应该循环直到找到L,字典大于M,然后将其插入那里。因为节点有先前的指针,所以插入不应该太难以在你自己的
上找到答案 1 :(得分:0)
如何将节点插入链表:
first
,last
以及某些next
和previous
字段,具体取决于必须插入的位置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 并用它来进行比较
祝你好运。