一次通过(扫描)和两次通过(扫描)之间的差异

时间:2016-06-29 13:04:29

标签: data-structures computer-science

前一天我接受了采访。 采访者告诉我,“编写一个程序,在链表的末尾添加一个节点”。 我给了他一个解决方案。但他告诉我一次通过(一次扫描)。 任何人都能解释一下,一遍的含义是什么,如何找到所写的程序是一遍还是两遍?

    这是我的代码
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;
}

2 个答案:

答案 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