面试题答案
一键面试#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* squareListRecursive(ListNode* head) {
if (head == nullptr) {
return nullptr;
}
head->val = head->val * head->val;
head->next = squareListRecursive(head->next);
return head;
}
void printList(ListNode* head) {
while (head != nullptr) {
std::cout << head->val << " -> ";
head = head->next;
}
std::cout << "nullptr" << std::endl;
}
void deleteList(ListNode* head) {
while (head != nullptr) {
ListNode* temp = head;
head = head->next;
delete temp;
}
}
你可以使用以下方式调用:
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
std::cout << "Original list: ";
printList(head);
head = squareListRecursive(head);
std::cout << "List after squaring: ";
printList(head);
deleteList(head);
return 0;
}
上述代码中,squareListRecursive
函数通过递归方式对链表节点的val
值进行平方操作。在递归过程中,首先对当前节点的val
值进行平方,然后递归处理下一个节点,并将处理后的下一个节点指针重新赋值给当前节点的next
指针,确保链表结构的完整性。
printList
函数用于打印链表,deleteList
函数用于释放链表所占用的内存。在main
函数中,创建一个简单链表,调用squareListRecursive
函数对链表节点值进行平方操作并打印结果,最后释放链表内存。