c++单向链表逆置递归
时间: 2023-06-28 21:13:17 浏览: 63
以下是一个基于递归方法的C++单向链表逆置实现:
```cpp
void reverseList(Node* current, Node* prev, Node** head) {
if (!current->next) {
*head = current;
current->next = prev;
return;
}
Node* nextNode = current->next;
current->next = prev;
reverseList(nextNode, current, head);
}
void reverseLinkedList(Node** head) {
if (!head) return;
reverseList(*head, nullptr, head);
}
```
这里定义了两个函数,`reverseLinkedList` 是调用入口,它接收一个指向头结点指针的指针,通过调用 `reverseList` 函数实现递归逆置。
在 `reverseList` 函数中,首先判断当前节点是否为尾节点,如果是则更新头结点指针和当前节点的 `next` 指针,递归结束。
否则,先保存下一个节点的指针,然后更新当前节点的 `next` 指针为前一个节点,递归调用 `reverseList` 函数。
最后,由于递归过程中,每次传入的都是当前节点的下一个节点,因此需要在 `reverseLinkedList` 函数中对头结点指针进行判空处理。
使用示例:
```cpp
int main() {
Node* head = nullptr;
append(&head, 1);
append(&head, 2);
append(&head, 3);
printList(head); // 输出 1 -> 2 -> 3 ->
reverseLinkedList(&head);
printList(head); // 输出 3 -> 2 -> 1 ->
return 0;
}
```
其中,`append` 函数用于向链表尾部添加元素,`printList` 函数用于遍历链表输出所有元素。