简体   繁体   English

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

[英]Doubly-linked list insertion sort function: Why isn't my insertion sort function inserting the last two integer inputs into my linked list?

My insertion sort function does not seem to be inserting my last two integer inputs: 15 and 8, into my doubly linked list. 我的插入排序函数似乎没有将我的最后两个整数输入:15和8插入到我的双向链接列表中。 My output leaves out 15 and 8. What am I doing wrong in the insertion sort function? 我的输出遗漏了15和8。在插入排序函数中我怎么了? I have provided my functions' code, input, and output. 我提供了函数的代码,输入和输出。 Thank you. 谢谢。

Here is my insertion sort function: 这是我的插入排序功能:

    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++;
  }

Here is my print function 这是我的打印功能

    public void printSortedList()
{
    Node curr = head;

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

Here is how I input in my main function: 这是我输入主要功能的方式:

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();
}

Here is my output: 这是我的输出:

5
5
5
10
10
60

You have a bug in insertion of n.getProb() <= curr.getProb() In your code 您在代码中插入n.getProb() <= curr.getProb()遇到错误

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

You

  1. set next of n to curr -- ok 将n的下一个设置为curr-确定
  2. set prev of n to currPrev -- ok 将n的上一个设置为currPrev-确定
  3. set prev of curr to n -- error, you missed link to prev of curr and it still reference to curr 将curr prev设置为n-错误,您错过了指向curr prev的链接,但它仍引用curr

The same problem in your n.getProb() > curr.getProb() part of code. 代码的n.getProb() > curr.getProb()部分中存在相同的问题。

Correct insertion: 正确插入:

           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);
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM