从普通链表创建排序链接列表



由于几个月前我刚刚开始编程,因此许多新信息即将到来,我很难赶上。所以在这里,我创建了一个我认为是排序链表的东西。原来它没有排序

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;
}
}

该方法有效,它插入人员,但他们没有像应有的那样排序。我需要更改/删除代码的哪一部分才能使其排序。

谢谢!

你应该像这样插入:

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;
}

您的else部分有问题。当给定相同的值时,您将返回false。但是,对于有效的案例,它没有得到正确的解释。

您需要具有以下内容。

  1. 检查当前节点值 - 检查空指针异常
  2. 检查下一个节点值 - 检查空指针异常
  3. 如果当前输入在当前节点和下一个节点之间,则在两者之间插入。
  4. 如果到达最后一个节点,则在末尾插入

最新更新