看圖說話,需要用到三個連續節點的指針,用中間那個來進行反序操作(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;
}