Advertisement

剑指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)

还没有任何评论哟~