Java 需要有关链表分拣机的帮助吗
这个问题希望我为我的LList类编写一个方法,它将在正确的位置添加一个新节点,假设列表已经按排序顺序排列。我正在处理的列表是一个队列 这是我的LNode类:Java 需要有关链表分拣机的帮助吗,java,Java,这个问题希望我为我的LList类编写一个方法,它将在正确的位置添加一个新节点,假设列表已经按排序顺序排列。我正在处理的列表是一个队列 这是我的LNode类: class LNode{ private int val; private LNode next; private LNode prev; public LNode(int v, LNode n, LNode p){ next = n; prev = p; va
class LNode{
private int val;
private LNode next;
private LNode prev;
public LNode(int v, LNode n, LNode p){
next = n;
prev = p;
val = v;
}
public int getVal(){
return val;
}
public LNode getNext(){
return next;
}
public LNode getPrev(){
return prev;
}
public void setVal(int v){
val = v;
}
public void setNext(LNode n){
next = n;
}
public void setPrev(LNode p){
prev = p;
}
}
这是我最喜欢的课程:
public class LTest{
public static void main(String[]args){
LList nums = new LList();
nums.enqueue(55);
nums.enqueue(20);
nums.enqueue(13);
nums.enqueue(11);
nums.sortedInsert(15);
nums.display();
}
}
以下是我在LList课程中尝试的内容:
public void sortedInsert(int v){
LNode tmp = head;
while(v<tmp.getVal()){
tmp = tmp.getNext();
}
tmp.setNext(tmp.getPrev().getNext());//tmp's next is now the original LNode
tmp.getPrev().getNext().setPrev(tmp);//the original LNode's previous is now tmp
tmp.getPrev().setNext(tmp);//tmp's previous LNode's next is now tmp
tmp.setVal(v);
}
public void sortedInsert(int v){
LNode tmp=头部;
虽然(v从我第一次查看您的代码来看,似乎您实际上没有在sortedInsert方法中为新值v创建一个新节点。我认为您需要创建一个新节点,然后通过LinkedList进行创建,然后附加新节点,而不必担心设置数据的值,因为它将被捕获到新节点中.有点像这样也许
LNode newnode = new LNode();
newnode.setVal(v);
LNode tmp = head;
while(v < head.getVal())
{
//etc...
}
LNode newnode=new LNode();
newnode.setVal(v);
LNode tmp=头部;
而(v
不要忘记,如果新节点位于开始位置,则需要将head变量更改为指向新节点。So tmp.getPrev().getNext()不会给我tmp设置为等于的原始LNode吗?忘了给你打电话了…@Matthew根据我的理解,我会说不。当你第一次创建“newnode”时,它根本没有连接到LinkedList,只是一种独自坐在内存中的方式。一旦你找到名为“newnode”的新节点应该插入的位置,你就可以重新启动正确地设置所有指针。与newnode.setPrev(tmp);newnode.setNext(tmp.getNext());tmp.setNext(newnode);newnode.getNext().setPrev(newnode)行一致;