(LeetCode C++)反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例1:

 

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例2:

 

输入:head = [1,2]
输出:[2,1]

示例3:

输入:head = []
输出:[]

提示:

链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

首先,链表的实现方式为:

Code:

class ListNode
{
public:
    int val;
    ListNode *next;

    // Function overload
    ListNode() {
        this->val = 0;
        this->next = nullptr;
    }

    ListNode(int x) {
        this->val = x;
        this->next = nullptr;
    }

    ListNode(int x, ListNode *y) {
        this->val = x;
        this->next = y;
    }
};

Code:

class Solution
{
public:
    // 反转链表
    ListNode *reverseList(ListNode *head)
    {
        // 如果输入的链表为空
        if(head==nullptr)
        {
            // 则返回空
            return nullptr;
        }

        // 用来缓存输入链表
        ListNode *temporary=head;
        // 用来缓存结果链表
        ListNode *resultCache=nullptr;
        // 结果链表
        ListNode *resultList=nullptr;

        // 如果输入链表不空,则持续遍历
        while(temporary!=nullptr)
        {
            // 保存结果链表中已有的节点
            resultCache=resultList;
            // 将结果链表的头指针指向输入链表
            resultList=temporary;
            // 将输入链表的头指针指向结果链表中保存的输入链表的头节点之后的节点
            temporary=resultList->next;
            // 将结果链表的下一个节点指向之前缓存的结果链表
            resultList->next=resultCache;
        }
        // 返回最终的翻转链表
        return resultList;
    }
};

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-linked-list


版权声明:本文为qq_40728667原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。