编写按升序对单个linkedlist排序的方法(java)
“insertAscending”方法仅在我输入新数字后才给我第一个数字。有人能帮我解决我做错的事吗?谢谢 公共类链接列表13{ //私有内部类节点编写按升序对单个linkedlist排序的方法(java),java,linked-list,Java,Linked List,“insertAscending”方法仅在我输入新数字后才给我第一个数字。有人能帮我解决我做错的事吗?谢谢 公共类链接列表13{ //私有内部类节点 private class Node{ int data; Node link; public Node(){ data = Integer.MIN_VALUE; link = null; } public Node(int x, Node p){ dat
private class Node{
int data;
Node link;
public Node(){
data = Integer.MIN_VALUE;
link = null;
}
public Node(int x, Node p){
data = x;
link = p;
}
}
// End of Node class
public Node head;
public LinkedList13(){
head = null;
}
public void insertAscending(int data){
Node node = new Node();
node.data = data;
if (head == null)
head = node;
Node p = head;
while (p.link != null)
{
if (p.link.data > data)
{ node.link = p.link;
p.link = node;
break;
}
p= p.link;
}
}
}检查if条件ifp.link.data>数据节点进入列表的唯一方式是当该条件为真时。这意味着,如果插入的数据的值大于或等于目前为止插入的所有数据,则该数据将被丢弃
解决此问题的简单方法是将break更改为return,并在循环结束后添加p.link=node 查看if条件ifp.link.data>数据节点进入列表的唯一方式是当该条件为真时。这意味着,如果插入的数据的值大于或等于目前为止插入的所有数据,则该数据将被丢弃
解决此问题的简单方法是将break更改为return,并在循环结束后添加p.link=node 提示:是p.link!=空值是否为真?提示:是p.link!=null是否为true?首先,在添加第一个元素时,您应该在设置列表的标题后返回 其次,您应该处理新插入的节点是列表中最小的节点,因此应该排在第一位的情况。循环从不将添加的节点与列表的开头进行比较 最后,如果添加的元素未插入while循环中,则应将其插入while循环之后
public void insertAscending(int data)
{
Node node = new Node();
node.data = data;
if (head == null) {
head = node;
return;
} else if (node.data < head.data) {
node.link = head;
head = node;
return;
}
Node p = head;
boolean added=false;
while (p.link != null)
{
if (p.link.data > data)
{
node.link = p.link;
p.link = node;
added = true;
break;
}
p = p.link;
}
if (!added)
p.link = node;
}
首先,您应该在添加第一个元素时设置列表的标题后返回 其次,您应该处理新插入的节点是列表中最小的节点,因此应该排在第一位的情况。循环从不将添加的节点与列表的开头进行比较 最后,如果添加的元素未插入while循环中,则应将其插入while循环之后
public void insertAscending(int data)
{
Node node = new Node();
node.data = data;
if (head == null) {
head = node;
return;
} else if (node.data < head.data) {
node.link = head;
head = node;
return;
}
Node p = head;
boolean added=false;
while (p.link != null)
{
if (p.link.data > data)
{
node.link = p.link;
p.link = node;
added = true;
break;
}
p = p.link;
}
if (!added)
p.link = node;
}
while循环永远不会执行。将head设置为第一个节点后,p.link==head.link==null。while循环永远不会执行。将head设置为第一个节点后,p.link==head.link==null。我应该在p=p.link之前还是之后添加p.link=节点?在循环之后。另请参见关于p.link的其他答案!=null总是错误的。这实际上是一个更大的问题。我应该在p=p.link之前还是之后添加p.link=node?在循环之后。另请参见关于p.link的其他答案!=null总是错误的。这实际上是一个更大的问题。上一个节点不是这样吗?很好!我错过了@永恒的惩罚,是虚假的最后一个节点。想一想在你的代码中发生了什么事情?这是真的吗?@永恒惩罚考虑列表长度=1的情况。最后一个节点不是真的吗?好点!我错过了@永恒的惩罚,是虚假的最后一个节点。想想在你的代码中会发生什么事情,这是真的吗?@永恒惩罚考虑列表长度=1的情况。我真的很感激6年后的解释,这对我帮助很大。泰:我真的很感激6年后的解释,这帮了我很大的忙。泰: