【发布时间】:2022-11-14 11:42:16
【问题描述】:
我试图阅读一个删除链表中重复元素的程序。我对 while 循环中的中断条件感到困惑。下面是代码。
public static <T> void removeDuplicates(SinglyLinkedList<T> list) {
SinglyLinkedList<T>.Node current = list.headNode; // will be used for outer loop
SinglyLinkedList<T>.Node compare = null; // will be used for inner loop
while ( current != null && current.nextNode != null) {
compare = current;
while (compare.nextNode != null) {
if (current.data.equals(compare.nextNode.data)) { //check if duplicate
compare.nextNode = compare.nextNode.nextNode;
} else {
compare = compare.nextNode;
}
}
current = current.nextNode;
}
}
while ( current != null && current.nextNode != null) 的声明让我感到困惑。如果我从语句中删除current != null,则输出相同。假设列表是 1 -> 2 -> 3 -> null。现在最初 current 是 1 ,然后如果我们遍历列表并且当 current 指向 3 时,那一刻(current.nextNode == null)并且如果我只使用 while( current.nextNode != null ,那对我来说就可以了。那为什么作者使用current != null。请帮助我消除混乱。
【问题讨论】:
-
尝试将一个没有元素的列表传递给它,看看会发生什么。
标签: java data-structures java-8 linked-list