【发布时间】:2014-10-04 08:54:24
【问题描述】:
我正在研究链表。我正在练习这本书中的问题:Cracking the coding interview。我被卡住了,我不明白作者是如何尝试实现以下代码的,它应该删除一个节点....
class Node {
Node next = null;
int data;
public Node (int d) {
data = d;
}
Node deleteNode(Node head, int d) {
Node n = head;
if (n.data == d) {
return head.next;
}
while (n.next != null) {
if (n.next.data == d) {
n.next = n.next.next;
return head;
}
n = n.next;
}
return head;
}
我有 3 个问题...
问题 1 - 我们将传递什么作为函数 deleteNode 的参数? Node head 的作用是什么? int d 的作用是什么?节点头是我们要删除的节点吗?还是我们的头节点?我的意思是,我们应该使用下面的方法对吗?
"Name of node".deleteNode("Node name", "integer value");
“节点名称”就是我们要删除的节点……对不对?
问题 2 - 在代码中很清楚,函数 deleteNode 仅使用数据来确认我们要删除的节点的身份。例如。如果(n.data ==d)。这是正常的做法吗?我的意思是如果我有 2 个不同的节点包含与数据值相同的整数怎么办?我们不应该使用节点的名称来指定我们要删除的节点吗?
问题 3 - 函数 deleteNode 返回一个节点。这是为什么?为了删除一个节点,我们只需要做 3 件事……首先,取消链接我们要删除的节点的指针。其次,把前一个节点的指针,放到我们要删除的节点指针原来指向的那个节点上。第三,删除未链接到列表的节点。我看不出返回类型节点在这里有什么作用......
【问题讨论】:
标签: java function object linked-list return-type