链表面试题精讲,面试必考的20道链表题!
链表是面试必考的数据结构,本文精选20道高频链表面试题,配合完整代码和解题思路。
一、链表基础
1.1 链表定义
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {
}
};
1.2 基本操作
// 创建节点
ListNode* node = new ListNode(1);
// 头插法
void insertHead(ListNode*& head, int val) {
ListNode* node = new ListNode(val);
node->next = head;
head = node;
}
// 尾插法
void insertTail(ListNode*& head, int val) {
ListNode* node = new ListNode(val);
if (!head) {
head = node; return; }
ListNode* cur = head;
while (cur->next) cur = cur->next;
cur->next = node;
}
// 删除节点
void deleteNode(ListNode*& head, int val) {
if (!head) return;
if (head->val == val) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* cur = head;
while (cur->next && cur->next->val != val) {
cur = cur->next;
}
if (cur->next) {
ListNode* temp = cur->next;
cur->next = temp->next;
delete temp;
}
}
// 打印链表
void printList(ListNode* head) {
while (head) {
std::cout << head->val << " -> ";
head = head->next;
}
std::cout << "nullptr" << std::endl;
}
// 释放链表
void freeList(ListNode* head) {
while (head) {
ListNode* temp = head;
head = head->next;
delete temp;
}
}
二、经典面试题
2.1 反转链表


368

被折叠的 条评论
为什么被折叠?



