17 个最常见的链表面试问题及答案

这里提供了链表面试问题和答案,可以帮助应届毕业生和有经验的求职者获得理想的工作。

1)请提及什么是链表?

链表是一种可以存储项目集合的数据结构。换句话说,链表可用于存储多个相同类型的对象。列表的每个单元或元素称为节点。每个节点都有自己的数据和下一个节点的地址。它就像一条链。链表用于创建图和树。

免费 PDF 下载:链表面试问题和答案


2)链表涉及哪种类型的内存分配?

动态内存分配指的是链接列表。


3)提及什么是链表的遍历?

术语“遍历”用于指处理列表中每个元素的操作。


4) 描述链表中的节点是什么?并说出链表的类型?

数据 + 链接合起来称为节点。链接列表的类型包括:

  • 单链表
  • 双向链表
  • 多重链接列表
  • 循环链表

5)请提及什么是单链表?

单链表是一种 数据结构在单链表中,每个节点都存储自身内容以及指向下一个节点的引用或指针,不存储任何指向前一个节点的引用或指针。

链表面试问题
链表面试问题

6) 线性和非线性之间的区别是什么? 排列 和链表?

线性数组和链表之间的区别如下所示,

线性阵列 链表
删除和插入很困难。 可以轻松进行删除和插入。
对于插入和删除,需要移动 对于插入和删除,不需要移动节点
其中空间被浪费 其中空间没有被浪费
它是昂贵的 不贵
不能根据要求减少或延长 可根据需要减少或延长
要利用每个元素都需要相同的时间。 要利用每个元素,需要不同的时间。
元素存储在连续的内存位置中。 元素可以存储在连续的内存位置,也可以不存储
如果我们必须去某个特定元素,我们可以直接到达那里 要到达特定节点,您需要经过该节点之前的所有节点。

7)请说明链表的应用有哪些?

链表的应用包括:

  • 链表用于实现队列、堆栈、图等。
  • 在链表中您不需要提前知道其大小。
  • 链表允许您在列表的开头和结尾插入元素。

8)链表中的虚拟头包含什么?

在链表中,虚拟头包含实际数据的第一个记录


9)说出在单链表开头插入数据的步骤?

在单链表开头插入数据的步骤包括:

  • 创建新节点
  • 通过将头指针分配给新节点的下一个指针来插入新节点
  • 将头指针更新为指向新节点。
Node *head;

void InsertNodeAtFront(int data)

{

/* 1. create the new node*/

Node *temp = new Node;

temp->data = data;

/* 2. insert it at the first position*/

temp->next = head;

/* 3. update the head to point to this new node*/

head = temp;

}

10)请说出单链表和双链表之间的区别?

双向链表节点包含三个字段:

  • 整数值和
  • 两个链接到其他节点
  • 一个指向前一个节点,另一个指向
  • other 指向下一个节点。

而单链表仅包含指向下一个节点的点。


11)请提及使用链表的应用程序有哪些?

队列和栈通常都使用链表实现。其他应用包括列表、二叉树、跳跃表、展开链表、哈希表等。


12)解释如何将一个项目添加到列表的开头?

要将项目添加到列表的开头,您必须执行以下操作:

  • 创建新项目并设置其值
  • 将新项目链接到列表的头部
  • 将列表的头部设置为我们的新项目

如果您使用函数执行此操作,则需要更改 head 变量。为此,您必须将一个指针传递给指针变量(双指针)。这样您就可以修改指针本身。


13)说出链表的最大优点是什么?

链表的最大好处是,您无需为列表指定固定大小。链中添加的元素越多,链就越大。


14)请描述如何从单链表中删除第一个节点?

从单链表中删除第一个节点

  • 将当前开始位置存储在另一个临时指针中
  • 将起始指针向前移动一个位置
  • 删除临时的,即前一个起始节点,因为我们有更新版本的起始指针

15)请说明如何从第一个到最后一个显示单链表?

要显示从第一个到最后一个的单链表,

  • 使用 create() 创建一个链接列表。
  • 您不能更改存储在全局变量“start”中的地址,因此您必须声明一个类型为 node 的临时变量 -“temp”
  • 要从开始到结束遍历,您应该在指针变量即 temp 中分配起始节点的地址。
struct node *temp;  //Declare temp

temp = start;       //Assign Starting Address to temp

如果 temp 为 NULL,那么您可以说已到达最后一个节点。

while(temp!=NULL)

{

printf("%d",temp->data);

temp=temp->next;

}

16)请说明如何在有空闲节点的链表中插入新节点?

要在链接列表中插入新节点,可用节点将在可用列表中可用。


17) 请说出哪个标题列表的最后一个节点包含空指针?

对于接地标题列表,您将发现最后一个节点包含空指针。

这些面试问题也会对你的口试有帮助

分享

6条评论

  1. 头像 萨米尔 说:

    这是非常好的问题…………………………

  2. 头像 阿姆里达(Amritha) 说:

    它帮助了我很多,谢谢

  3. 请问我该如何解决这个问题
    (带有虚拟头节点的链表)
    给定两个链表 L1 和 L2,用伪语言决定一个过程,该过程使用 ADT 链表将 L2 插入到 L1 倒数第三个元素之后

    如果 L1 是 1-2-3-4-5-6-7-8-9 且 L2 是 1-1-1

    The result is 1-2-3-4-5-6-7-1-1-1-8-9

    1. 头像 穆罕纳德·萨玛斯尼 说:

      您需要先使用两个指针遍历 L1:
      指针1 – 距头部一步。
      指针2 – 距头部3步。
      while (pointer2.next!=null){
      指针2 = 指针2.next;
      指针1 = 指针1.next;
      }
      // 现在你将有一个指向倒数第 1 个节点的指针 3。
      temp = 指针1.next
      指针1.下一个=L2;
      遍历L2到最后得到最后一个元素->
      LastElementOfL2.Next = temp;
      ...

发表评论

您的电邮地址不会被公开。 必填项 *