LeetCode-0206 反转链表

这是我在 2011 年冬天参加校园招聘的时候遇到的一个题目,也是 LeetCode 的第 206 题。

当时题目要求不使用额外的空间,也就是不能通过倒着重建链表的方式实现。

方法也很直接,把每一个节点的 next 指向它原来的上一个(原来的头节点的 next 指向 NIL),返回指向原来最后一个节点的指针。

下面的解答与我当时的回答思路一致,但经过规范化,且用了现代的 C++ 语法。

C++ 实现。

template<typename T>
struct Node
{
    T data;
    Node* next;
};

template<typename T>
Node<T>* ReverseLinkedList(Node<T>* const head)
{
    if (head == nullptr || head->next == nullptr)
    {
        return head;
    }

    Node<T>* p = nullptr;
    Node<T>* q = head;
    Node<T>* r = head->next;

    while (r != nullptr)
    {
        q->next = p;
        p = q;
        q = r;
        r = r->next;
    }
    q->next = p;

    return q;
}
posted @ 2022-05-19 17:55  风华神使  阅读(28)  评论(0)    收藏  举报