我前一天参加了一个面试。面试官让我写一个程序,在链表的末尾添加一个节点。我给了他一个解决办法。但他告诉我要在一次扫描中实现它。有人能告诉我,一次通过的意思是什么,以及如何发现程序写在一次或两次通过?
这是我的代码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;
}
如果这是你给面试官的代码,那么面试官一定是看错了,因为这是一次通过。
在您的情况下,"通过"将是您的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
,直到找到正确的元素。
我想这里的"两次遍历"意味着在代码中对整个列表迭代两次。在添加新节点时不需要这样做。