看图说话,需要用到三个连续节点的指针,用中间那个来进行反序操作(P2->next=P1)。
template<typename T>
struct Node
{
T value;
Node<T> *next;
};
template<typename T>
Node<T> *singleLinkedListReverse(Node<T> *head)
{
if ( !head || !head->next)
{
return head;
}
//需要同时知道相连的三个节点,
//将中间节点的指针指向前一个节点后,继续向后遍历
Node<T> *p1 = head, *p2 = head->next, *p3;
while (p2)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
head->next = nullptr;
return p1;
}