方法一:遍历链表逆向存储
- 遍历原链表,将每个节点的指针方向逆转,即将每个节点的
next
指针指向其前一个节点,而不是指向后一个节点。 - 最后更新链表的头指针,使得链表的末尾节点成为新的头节点。
void reverseLinkedList(ListNode*& head) {
ListNode* prev = nullptr;
ListNode* current = head;
ListNode* next = nullptr;
while (current != nullptr) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev; // 更新链表的头节点
}
方法二:使用递归逆向移动链表
- 递归到链表的末尾节点。
- 在递归回溯的过程中逐步改变节点指针的指向,实现链表的逆向。
ListNode* reverseLinkedList(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* newHead = reverseLinkedList(head->next);
head->next->next = head;
head->next = nullptr;
return newHead;
}