前一天我接受了采访。 采访者告诉我,“编写一个程序,在链表的末尾添加一个节点”。 我给了他一个解决方案。但他告诉我一次通过(一次扫描)。 任何人都能解释一下,一遍的含义是什么,如何找到所写的程序是一遍还是两遍?
public void atLast(int new_data)
{
Node new_node=new Node(new_data);
if(head==null)
{
head=new Node(new_data);
return;
}
new_node.next=null;
Node last=head;
while(last.next!=null)
{
last=last.next;
}
last.next=new_node;
return;
}
答案 0 :(得分:0)
我想象"两次传球"这意味着您在代码中遍历整个列表两次。您不应该这样做来添加新节点。
答案 1 :(得分:0)
如果这是您给出的代码,那么面试官必须误解它,因为它只是一次通过。
在你的情况下,"传递"将是你的while
循环。它也可以通过递归,for
或任何其他类型的循环来完成,这些循环遍历数组中的元素(或其他形式的项目列表)。
在您的代码中,您将浏览Node
列表并在结尾插入元素。这是在一个循环中完成的,使其成为一次通过。
现在来看两个传球的情况。比如说你被要求删除具有最大值的元素并写下类似的内容:
int index = 0;
int count = 0;
int max = 0;
while(temp_node != null)
{
if(temp_node.data > max)
{
index = count;
max = temp_node.data;
}
count++;
temp_node = temp_node.next;
}
for(int i = 0; i < count; i++)
{
if(i == index)
{
//Functionality to remove node.
}
}
第一遍(while
)检测到具有最大值的Node
。第二遍(for
)通过循环遍历所有元素直到找到正确的元素来删除此Node
。