【发布时间】:2016-10-20 01:06:28
【问题描述】:
这是一个相当简单的问题,但我很困惑:
给定一个单链表,编写一个函数来删除一个给定的节点。
1) 它必须接受指向起始节点的指针作为第一个参数和要删除的节点作为第二个参数,即指向头节点的指针不是全局的。 2)它不应该返回指向头节点的指针。 3) 它不应该接受指向头节点的指针。
Java 中的解决方案如下:
void deleteNode(Node node, Node n) {
if (node == n) {
if (node.next == null) {
System.out.println("There is only one node. The list "
+ "can't be made empty ");
return;
}
node.data = node.next.data;
n = node.next;
node.next = node.next.next;
System.gc();
return;
}
// When not first node, follow the normal deletion process
// find the previous node
Node prev = node;
while (prev.next != null && prev.next != n) {
prev = prev.next;
}
if (prev.next == null) {
System.out.println("Given node is not present in Linked List");
return;
}
prev.next = prev.next.next;
System.gc();
return;
}
我很困惑为什么在删除头节点时,我们没有修改头指针而是复制字段(更改内容),但在删除其他节点时,它只是prev.next = prev.next.next
如果我们在删除头节点时只做head = head.next,它是否有效?
谢谢!
【问题讨论】:
标签: java linked-list