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;
}

浙公网安备 33010602011771号