Data structures 为什么我的双链接插入算法不起作用?

Data structures 为什么我的双链接插入算法不起作用?,data-structures,linked-list,Data Structures,Linked List,我有一个关于双链接插入算法的任务,我花了很多时间,但是仍然失败,sortLink方法仍然无法工作,有人能帮我解决吗?代码如下: Link.java: Test.java 公共类测试{ 公共静态void main(字符串[]args){ testLink(); } 公共静态无效sortLink(链接头链接){ Link curLink=null,preLink=null,nextLink=null,Link=null,pLink=null; curLink=headLink.getNext

我有一个关于双链接插入算法的任务,我花了很多时间,但是仍然失败,
sortLink
方法仍然无法工作,有人能帮我解决吗?代码如下:

  • Link.java
  • Test.java
公共类测试{
公共静态void main(字符串[]args){
testLink();
}
公共静态无效sortLink(链接头链接){
Link curLink=null,preLink=null,nextLink=null,Link=null,pLink=null;
curLink=headLink.getNext();
headLink.setNext(null);
headLink.setPrev(空);
while(curLink!=null){
pLink=curLink;
link=curLink.getNext();

if(curLink.getValue()当我将代码移植到C#时,它就工作了,没有改变逻辑。你的错误是什么?@shree.pat18它可以按顺序输出结果,但是每个链接之间的关系都不正确,所以如果我们想插入或删除一些链接,或者从一端到前端显示链接,它会出错,你能帮我吗?不要使用
curLink=headLink.getNext();
。如果headLink本身为空,则会导致问题。
  public class Link {

    private int value;
    private Link next;
    private Link prev;

    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
    public Link getNext() {
        return next;
    }
    public void setNext(Link next) {
        this.next = next;
    }
    public Link getPrev() {
        return prev;
    }
    public void setPrev(Link prev) {
        this.prev = prev;
    }
}
public class Test {

    public static void main(String[] args) {
        testLink();
    }


    public static void sortLink(Link headLink){

        Link curLink=null,preLink=null,nextLink=null,link=null,pLink=null;

        curLink=headLink.getNext();
        headLink.setNext(null);
        headLink.setPrev(null);

        while(curLink!=null){

            pLink=curLink;

            link=curLink.getNext();


            if(curLink.getValue()<headLink.getValue()){
                curLink.setNext(headLink);
                curLink.setPrev(headLink.getPrev());
                headLink=curLink;
            }else{

                preLink=headLink;
                nextLink=headLink.getNext();

                while(nextLink!=null&&nextLink.getValue()<curLink.getValue()){
                    preLink=nextLink;
                    nextLink=nextLink.getNext();
                    curLink.setPrev(pLink);
                }
                curLink.setNext(preLink.getNext());

                preLink.setNext(curLink);
            }
            curLink=link;
        }

        showFE(headLink);
        //showEF(curLink);
    }

    public static void testLink(){
        Link link1=new Link();
        link1.setValue(7);
        Link link2=new Link();
        link2.setValue(3);
        Link link3=new Link();
        link3.setValue(1);
        Link link4=new Link();
        link4.setValue(2);
        Link link5=new Link();
        link5.setValue(9);
        Link link6=new Link();
        link6.setValue(6);
        Link link7=new Link();
        link7.setValue(4);
        Link link8=new Link();
        link8.setValue(8);
        Link link9=new Link();
        link9.setValue(5);

        link1.setNext(link2);
        link1.setPrev(null);

        link2.setNext(link3);
        link2.setPrev(link1);

        link3.setNext(link4);
        link3.setPrev(link2);

        link4.setNext(link5);
        link4.setPrev(link3);

        link5.setNext(link6);
        link5.setPrev(link4);

        link6.setNext(link7);
        link6.setPrev(link5);

        link7.setNext(link8);
        link7.setPrev(link6);

        link8.setNext(link9);
        link8.setPrev(link7);

        link9.setPrev(link8);
        link9.setNext(null);

        showFE(link1);

        //showEF(link9);

        sortLink(link1);
    }


    //show node from front to end
    public static void showFE(Link link){
        while(link!=null){
            System.out.print(link.getValue()+"-->");
            link=link.getNext();
        }
        System.out.println();
    }

    //从尾至头显示链表
//  public static void showEF(Link link){
//      while(link!=null){
//          System.out.print(link.getValue()+"<--");
//          link=link.getPrev();
//      }
//      System.out.println();
//  }
}