头歌C++之链表强化练习题链表与归递答案
时间: 2024-08-16 15:02:25 浏览: 183
头歌C++中的链表是一种基础数据结构,常用于需要频繁插入和删除元素的场景。下面是一个关于链表的强化练习题目示例:
**题目:单链表反转**
给定一个单向链表,按节点值从大到小排序,并返回一个新的链表,新链表的每个节点值等于原链表中对应位置上所有节点值的最大值。
**答案示例:**
```cpp
#include <iostream>
#include <vector>
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* reverseList(ListNode* head) {
if (!head || !head->next) return head; // 链表为空或只有一个节点,直接返回
ListNode* prev = nullptr, *current = head, *temp = nullptr;
while (current) {
temp = current->next;
current->next = prev; // 翻转节点指针
prev = current;
current = temp;
}
return prev; // 返回新的头节点
}
void printList(ListNode* head) {
while (head) {
std::cout << head->val << " -> ";
head = head->next;
}
std::cout << "nullptr" << std::endl;
}
int main() {
// 创建链表示例
ListNode* list = new ListNode(5);
list->next = new ListNode(2);
list->next->next = new ListNode(8);
list->next->next->next = new ListNode(3);
printList(list); // 输出:3 -> 8 -> 5 -> 2 -> nullptr
list = reverseList(list);
printList(list); // 输出:8 -> 5 -> 3 -> 2 -> nullptr
return 0;
}
```
在这个例子中,我们首先创建了一个链表并打印出原始顺序。然后通过`reverseList`函数将其反转,最后再次打印结果,可以看到链表已经按照节点值从大到小排列了。
**相关问题--:**
1. 除了反转,链表还有哪些常见的操作?
2. 如何在链表中查找特定值的第一个节点?
3. 怎么处理链表的循环问题?
阅读全文