剑指offer 反转链表解析(特别感谢大雪菜学长的讲解)
发布时间
阅读量:
阅读量
【递归方式实现链表反转
//采用递归的实现方式,虽然这种方法并不被特别推荐,因为如果操作不当可能会导致程序崩溃,但其使用起来却十分便捷
/**
- 单链表节点的定义
- struct ListNode {
- int val;
- ListNode* next;
- ListNode(int x) : val(x), next(NULL) {}
- };
/
//递归实现链表反转
class Solution {
public:
ListNode reverseList(ListNode* head) {
if(head == nullptr || head->next == nullptr) return head;//判断当前节点是否为空或者下一个节点是否为空,若满足条件则返回当前节点;
ListNode* tail = reverseList(head->next);//将当前节点的下一个节点作为参数传递给递归函数,获取反转后的新链表的尾部节点;
head->next->next = head;//将当前节点的下一个节点的next指针指向当前节点,使其成为新链表的一部分;
head->next = nullptr;//将当前节点的next指针置空,防止形成环状结构;
return tail;
}
全部评论 (0)
还没有任何评论哟~
