链表反转是一个常见的算法问题,可以使用递归和指向指针的指针来实现。下面是一个示例的链表反转函数:
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
void reverseList(ListNode** head) {
if (*head == nullptr || (*head)->next == nullptr) {
return;
}
ListNode* prev = nullptr;
ListNode* curr = *head;
ListNode* next = nullptr;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
*head = prev;
}
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != nullptr) {
std::cout << curr->val << " ";
curr = curr->next;
}
std::cout << std::endl;
}
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = new ListNode(5);
std::cout << "Original List: ";
printList(head);
reverseList(&head);
std::cout << "Reversed List: ";
printList(head);
return 0;
}
这段代码定义了一个链表节点结构ListNode
,并实现了reverseList
函数来反转链表。reverseList
函数使用三个指针prev
、curr
和next
来进行链表节点的反转操作。最后,通过调用printList
函数来打印出反转后的链表。
这个算法的时间复杂度是O(n),其中n是链表的长度。
在腾讯云中,可以使用云服务器(CVM)来进行开发和运行这段代码。云服务器提供了强大的计算能力和灵活的配置选项,适用于各种应用场景。您可以通过以下链接了解更多关于腾讯云云服务器的信息:
请注意,以上答案仅供参考,具体的实现方式和推荐的产品可能因实际需求和环境而异。
领取专属 10元无门槛券
手把手带您无忧上云