【发布时间】:2014-11-11 15:27:00
【问题描述】:
下面是我对 ASC 链表的插入方法的实现,它根据优先级将 PQueueItem 对象插入到 PQueueItem 类型的链表中。
我基本上检查看看,在优先级方面,如果要插入的项目大于当前项目并且小于下一个项目,如果是,则插入它。如果等于下一项,按字母顺序排列。如果它小于当前项,则将其放在它之前。如果它大于当前项和下一项,则遍历列表,直到满足其他检查之一。
这是实现插入的适当/有效方式吗?如果您认为我的想法两者兼而有之,那么非代码想法会很棒:
- 不正确
- 效率低下。
干杯!
public void insert(T data, int priority) {
if(order == ORDER.ASC)
{
//current item
PQueueItem<T> temp = head;
while(temp.getNext() != null)
{
//is inserted item greater than current item
if(priority > temp.getPriority())
{
//is inserted item smaller than next item
if(priority < temp.getNext().getPriority())
{
//create and insert new item, reassign links in the list
PQueueItem<T> newPQ = new PQueueItem<T>(data, priority);
newPQ.setNext(temp.getNext());
temp.setNext(newPQ);
}
//check to see if priority equates to the next item's priority
else if(priority == temp.getNext().getPriority())
{
//is new item's data alphabetically greater than the next item's data
if(((String)data).compareToIgnoreCase((String)temp.getNext().getData()) > 0)
{
PQueueItem<T> nextPQ = temp.getNext();
PQueueItem<T> newPQ = new PQueueItem<T>(data, priority);
newPQ.setNext(nextPQ.getNext());
nextPQ.setNext(newPQ);
}
else
{
PQueueItem<T> newPQ = new PQueueItem<T>(data, priority);
newPQ.setNext(temp.getNext());
temp.setNext(newPQ);
}
}
else
{
//iterate current item
temp = head.getNext();
}
}
//if item to be inserted is smaller than the current item
else if(priority < temp.getPriority())
{
PQueueItem<T> newPQ = new PQueueItem<T>(temp.getData(), temp.getPriority());
newPQ.setNext(temp.getNext());
temp.setData(data);
temp.setPriority(priority);
}
}
}
else
{
//code for DESC
}
}
【问题讨论】:
-
如果这是一段工作代码,也许你的问题更适合SO Code Review。这里主要是关于“发现问题”之类的
-
我不确定这是否可行,我只是将其作为一种可能的解决方案。对问题的措辞不佳表示歉意!
-
如果您不确定它是否有效,您应该编写一些测试用例并对其进行编码;)
-
你提出了一个有效的观点! ;)
标签: java linked-list