方法'insertAscending'仅在我输入新数字后才给出第一个数字。谁能帮助我做错了什么?谢谢。
公共类LinkedList13 { //私有内部类节点
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;
}
}
}
答案 0 :(得分:2)
提示:是(p.link!= null)是真的吗?
答案 1 :(得分:0)
查看您的if
条件if(p.link.data > data)
node
进入列表的唯一方法是何时为真。这意味着,如果插入的data
的值大于(或等于)到目前为止已插入的所有内容,则将被丢弃。
解决此问题的一种简单方法是将break
更改为return
并在结尾处(循环之后)添加p.link=node
。
答案 2 :(得分:0)
首先,您应该在设置列表的头部后(当添加第一个元素时)返回。
其次,您应该处理新插入的节点在列表中最小的情况(因此应该首先出现)。您的循环从不将添加的节点与列表的头部进行比较。
最后,如果添加的元素没有插入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;
}