双链表插入排序函数:为什么我的插入排序函数不是将最后两个整数输入插入到我的链表中?

时间:2015-01-28 09:28:54

标签: java doubly-linked-list insertion-sort

我的插入排序功能似乎没有将我的最后两个整数输入:15和8插入到我的双向链表中。我的输出结果是15和8.我在插入排序函数中做错了什么?我提供了我的功能'代码,输入和输出。谢谢。

这是我的插入排序功能:

    public void insertionSort(int p)
   {
    Node n = new Node(p);
    Node curr = head;

    if(isEmpty())
    {
        head = n;
    }

    else
    {
        if(n.getProb() <= curr.getProb())
        {
            n.setNext(curr);
            curr.setPrev(n);
            head = n;
        }

        else if(n.getProb() > curr.getProb())
        {
            while(n.getProb() > curr.getProb() && curr.getNext() != null)
            {
                curr = curr.getNext();
            }

            if(n.getProb() < curr.getProb())
            {
                n.setNext(curr);
                n.setPrev(curr.getPrev());
                curr.setPrev(n);
            }

            else if(n.getProb() >= curr.getProb())
            {
                n.setNext(curr.getNext());
                n.setPrev(curr);
                curr.setNext(n);
            }
        }
    }
    size++;
  }

这是我的打印功能

    public void printSortedList()
{
    Node curr = head;

    while(curr != null)
    {
        System.out.println(curr.getProb());
        curr = curr.getNext();
    }
}

以下是我在主要功能中输入的内容:

public static void main(String [] args)
{
    List list = new List();

    list.insertionSort(10);
    list.insertionSort(5);
    list.insertionSort(5);
    list.insertionSort(60);
    list.insertionSort(5);
    list.insertionSort(10);
    list.insertionSort(15);
    list.insertionSort(8);

    list.printSortedList();
}

以下是我的输出:

5
5
5
10
10
60

1 个答案:

答案 0 :(得分:0)

您在插入n.getProb() <= curr.getProb()时遇到错误 在你的代码中

n.setNext(curr);
n.setPrev(curr.getPrev());
curr.setPrev(n);

  1. 将n的下一个设置为curr - ok
  2. 将prev的n设置为currPrev - ok
  3. 将curr的prev设置为n - 错误,你错过了curr的上传链接,它仍然引用了curr
  4. n.getProb() > curr.getProb()部分代码中的同一问题。

    正确插入:

               if (n.getProb() <= curr.getProb()) {
                    n.setNext(curr);
                    n.setPrev(curr.getPrev());
                    if (curr.getPrev() != null)
                         curr.getPrev().setNext(n);//set next to curr's prev
                    curr.setPrev(n);
                } else if (n.getProb() > curr.getProb()) {
                    n.setNext(curr.getNext());
                    n.setPrev(curr);
                    if (curr.getNext() != null)
                         curr.getNext().setPrev(n);//set prev to curr's next
                    curr.setNext(n);
                }