17 个最常见的链表面试问题及答案
这里提供了链表面试问题和答案,可以帮助应届毕业生和有经验的求职者获得理想的工作。
1)请提及什么是链表?
链表是一种可以存储项目集合的数据结构。换句话说,链表可用于存储多个相同类型的对象。列表的每个单元或元素称为节点。每个节点都有自己的数据和下一个节点的地址。它就像一条链。链表用于创建图和树。
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) 请说出哪个标题列表的最后一个节点包含空指针?
对于接地标题列表,您将发现最后一个节点包含空指针。
这些面试问题也会对你的口试有帮助
太好了
这是非常好的问题…………………………
它帮助了我很多,谢谢
请问我该如何解决这个问题
(带有虚拟头节点的链表)
给定两个链表 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
您需要先使用两个指针遍历 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;
...
非常好