双链表插入排序函数:为什么我的插入排序函数没有将最后两个整数输入插入到我的链表中?
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);
你
- 将 n 的 next 设置为 curr -- ok
- 将 n 的上一个设置为 currPrev -- 确定
- 将 curr 的 prev 设置为 n -- 错误,您错过了 link 到 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);
}
我的插入排序函数似乎没有将我的最后两个整数输入: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);
你
- 将 n 的 next 设置为 curr -- ok
- 将 n 的上一个设置为 currPrev -- 确定
- 将 curr 的 prev 设置为 n -- 错误,您错过了 link 到 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);
}