public void delete(int data) {
// Null list case
if(list == null) return;
// Delete the only element case
if(list.data == data && list.next.data == list.data) {
list.next = null;
list = null;
return;
}
// Delete the front of the list case
if(list.data == data) {
// Move to the end of the list
Node end = list;
while(end.next.data != list.data) {
end = end.next;
}
Node temp = list;
list = list.next;
temp.next = null;
end.next = list;
return;
}
// Delete something in the middle
Node temp = list;
while(temp.next.data != data && temp.next.data != list.data) {
temp = temp.next;
}
// We circled the list and did not find the element to delete
if(temp.next.data == list.data) return;
Node del = temp.next;
temp.next = temp.next.next;
del.next = null;
}
1条答案
按热度按时间bjp0bcyl1#
实际上有四种情况需要考虑。
列表是否为空?如果为空,则返回null或
列表中只有一个元素。将指针设置为null,将列表设置为null。
删除列表前面的内容。在这个例子中我们有几个步骤。
1.创建一个指向列表的临时指针。
1.移动到列表末尾。
1.将临时指针设置到列表的前面。
1.向前移动列表的前端。
1.将temp的指针设置为空。
1.将列表的末尾设置为指向列表的新前端。
在我们删除中间项的地方,以1-〉2-〉3-〉的格式删除一些东西。注意。这也适用于删除最后一项,因为它会循环回到1。
1.创建一个指向列表的临时指针。
1.向前移动临时指针,直到找到要删除的数据。
1.创建一个删除节点(示例节点删除)并将其设置为temp的指针。
1.设置temp以跳过要删除的节点。
1.将删除节点的指针设置为null。