Data structures 一次扫描和两次扫描之间的差异

Data structures 一次扫描和两次扫描之间的差异,data-structures,computer-science,Data Structures,Computer Science,一天前,我参加了一次面试。 面试官让我“编写一个程序,在链表的末尾添加一个节点”。 我给了他一个解决办法。但是他告诉我一次扫描就可以实现。 有人能给我解释一下,一次通过的意思是什么,如何找到一次或两次通过编写的程序 这是我的代码 public void atLast(int new_data) { Node new_node=new Node(new_data); if(head==null)

一天前,我参加了一次面试。 面试官让我“编写一个程序,在链表的末尾添加一个节点”。 我给了他一个解决办法。但是他告诉我一次扫描就可以实现。 有人能给我解释一下,一次通过的意思是什么,如何找到一次或两次通过编写的程序

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

我认为这里的“两次通过”意味着在代码中对整个列表进行了两次迭代。你不需要这样做来添加一个新节点。

如果这是你给面试官的代码,面试官一定是误读了,因为这是一个单一的过程

在您的情况下,“pass”将是您的
while
循环。也可以使用递归、
for
、或通过数组中元素的任何其他类型的循环(或项目列表的其他形式)来完成

在代码中,您运行
节点列表
,并在末尾插入元素。这是在一个循环中完成的,使其成为一个单一过程

现在来看一个有两个通行证的案例。例如,您被要求删除具有最大值的元素,并编写了类似的内容:

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.
    }
}
int索引=0;
整数计数=0;
int max=0;
while(临时节点!=null)
{
如果(温度节点数据>最大值)
{
指数=计数;
max=温度节点数据;
}
计数++;
temp_node=temp_node.next;
}
for(int i=0;i

第一次通过(
while
)检测具有最大值的
节点。第二遍(
for
)通过再次循环所有元素直到找到正确的元素来删除此
节点。

您的解决方案是什么?“通过”是指通过集合的单个迭代。所以“一次通过”意味着只对节点进行一次迭代;两次通过等于两次,等等。也许告诉我们你的解决方案,看看它是否真的在一次通过中,对我来说,这看起来像是一次通过。我不知道面试官可能会想把我弄糊涂。这是一个简单的解释,谢谢,现在我明白了