簡體   English   中英

雙鏈列表插入排序函數:為什么我的插入排序函數不將最后兩個整數輸入插入到鏈表中?

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

我的插入排序函數似乎沒有將我的最后兩個整數輸入: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

您在代碼中插入n.getProb() <= curr.getProb()遇到錯誤

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

  1. 將n的下一個設置為curr-確定
  2. 將n的上一個設置為currPrev-確定
  3. 將curr prev設置為n-錯誤,您錯過了指向curr prev的鏈接,但它仍引用curr

代碼的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);
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM