我已经为实践目的提供了如下所示的代码,我的任务是修改它,以便始终对链表进行排序。我现在的主要问题是我不知道从哪里开始或者要修改哪些方法。任何提示都是受欢迎的。
stringX + "y"
答案 0 :(得分:2)
我认为您必须做的唯一重大改变是在插入元素时保持列表排序。请注意,反向操作,即删除元素,不需要更改,因为您只是扔掉了不会改变列表中任何顺序的东西。
下面的add()
方法沿着列表向下走,直到找到合适的位置。然后,它在新节点中拼接并更新适用的start
,prev
和curr
指针。
public void add(T x) {
Node newNode = new Node();
newNode.info = x;
// case: start is null; just assign start to the new node and return
if (start == null) {
start = newNode;
curr = start;
// prev is null, hence not formally assigned here
return;
}
// case: new node to be inserted comes before the current start;
// in this case, point the new node to start, update pointers, and return
if (x.compareTo(start.info) < 0) {
newNode.link = start;
start = newNode;
curr = start;
// again we leave prev undefined, as it is null
return;
}
// otherwise walk down the list until reaching either the end of the list
// or the first position whose element is greater than the node to be
// inserted; then insert the node and update the pointers
prev = start;
curr = start;
while (curr != null && x.compareTo(curr.info) >= 0) {
prev = curr;
curr = curr.link;
}
// splice in the new node and update the curr pointer (prev already correct)
newNode.link = prev.link;
prev.link = newNode;
curr = newNode;
}
答案 1 :(得分:1)
确保订单的关键是通过add()
方法。
按升序排序:
1)读取当前节点的值。
2)遍历节点,直到遇到值> gt; = with current。
的节点3)在该位置插入节点。
以上可以应用二进制搜索来获取插入位置。 要按降序排序,只需确保当前节点的值为&lt;目标节点的值。