题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路
- 定义三个指针,分别指向当前结点的前一个结点,当前结点,当前结点的下一个结点。
- 先保存当前结点的下一个结点,防止断链,然后将当前结点的 next 指向它的前一个结点,这样就实现单个结点的反转,之后将当前结点和当前结点的前一个结点向后移动,注意顺序。
- 当前结点是尾结点的时候,将当前结点赋给新表头,实现链表反转。
代码
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == NULL)
return pHead;
ListNode* pNow, *pPre = NULL, *pNext, *newHead;
pNow = pHead;
while(pNow)
{
pNext = pNow->next;
if(pNext == NULL)
{
newHead = pNow;
}
pNow->next = pPre;
pPre = pNow;
pNow = pNext;
}
return newHead;
}
};