Java 从普通链接列表创建已排序的链接列表
因为几个月前我刚开始编程,很多新信息即将出现,我很难跟上。所以我在这里创建了一个我认为是排序的链表。结果它没有排序Java 从普通链接列表创建已排序的链接列表,java,methods,linked-list,sortedlist,Java,Methods,Linked List,Sortedlist,因为几个月前我刚开始编程,很多新信息即将出现,我很难跟上。所以我在这里创建了一个我认为是排序的链表。结果它没有排序 public boolean insert(Person person) { Node n = new Node(person); Node p = head; if(p == null) { head = n; size++; return true; } else { Node
public boolean insert(Person person) {
Node n = new Node(person);
Node p = head;
if(p == null) {
head = n;
size++;
return true;
} else {
Node temp = p;
int comparison;
while(temp.next != null) {
comparison = temp.person.name.compareTo(person.name);
if(comparison == 0){
return false;
}
temp = temp.next;
}
temp.next = n;
size++;
return true;
}
}
该方法有效,它插入了人员,但他们没有按应有的顺序进行排序。我需要更改/删除代码的哪一部分才能进行排序
谢谢 您的
else
部件有问题。当给定相同的值时,返回的是false
。但是,对于一个有效的案例,它并没有得到正确的解释
您需要具备以下条件
您的
else
部件中有问题。当给定相同的值时,返回的是false
。但是,对于一个有效的案例,它并没有得到正确的解释
您需要具备以下条件
您应该像这样插入:
static boolean insert(Person person) {
Node newNode = new Node(person);
if (head == null) {
head = newNode;
size++;
return true;
}
Node current = head;
Node prev = null;
int comparison;
while (current != null) {
comparison = person.name.compareTo(current.person.name);
if (comparison == 0) {
return false;
} else if (comparison > 0) { /// greater than
if (current.next == null) { // check if reach tail of the linked list add and break
current.next = newNode;
break;
}
} else { // less then
if (prev == null) { // check if it should be first then put and break
Node oldHead = head;
head = newNode;
head.next = oldHead;
break;
}
prev.next = newNode;
newNode.next = current;
break;
}
prev = current;
current = current.next;
}
size++;
return true;
}
您应该像这样插入:
static boolean insert(Person person) {
Node newNode = new Node(person);
if (head == null) {
head = newNode;
size++;
return true;
}
Node current = head;
Node prev = null;
int comparison;
while (current != null) {
comparison = person.name.compareTo(current.person.name);
if (comparison == 0) {
return false;
} else if (comparison > 0) { /// greater than
if (current.next == null) { // check if reach tail of the linked list add and break
current.next = newNode;
break;
}
} else { // less then
if (prev == null) { // check if it should be first then put and break
Node oldHead = head;
head = newNode;
head.next = oldHead;
break;
}
prev.next = newNode;
newNode.next = current;
break;
}
prev = current;
current = current.next;
}
size++;
return true;
}
您必须处理比较>0的情况。其中,您需要在当前节点之前插入新节点。您必须处理比较>0的情况。您需要在当前节点之前插入新节点的位置。嘿,再次感谢您。这些注释有助于我更好地理解程序本身。嘿,再次感谢您。这些注释也有助于我更好地理解程序本身。