2016-06-29 430 views
1

前一天我进行了一次采访。 访员告诉我,“编写一个程序在链表的末尾添加一个节点”。 我给了他一个解决方案。但他告诉我一次性实施它(一次扫描)。 是否有人可以解释我,一遍传递的含义是什么,以及如何找到所编写的程序是一回合还是两回合?一次扫描(扫描)和两次扫描(扫描)之间的区别

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

也许告诉我们你的解决方案,看看它是否真的不是一回合 –

+0

这看起来像一次传递给我。 –

回答

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,直到找到正确的元素。

+0

其简单的解释,谢谢,现在对我来说很清楚。 :) – nik7

0

我想像“两道”在这里是指你在整个清单在代码重复两次。您不需要这样做来添加新节点。