反转链表
题目描述
描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入:
{1,2,3}
返回值:
{3,2,1}
题目分析
- 使用三个指针front,mid,rear,分别指向前三个结点
- mid指向的结点的next指向front指向的结点,再让三个指针在逻辑上向后移动一位
代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (!pHead || !(pHead->next)) return pHead;
ListNode* pFront = pHead;
ListNode* pMid = pHead->next;
ListNode* pRear = pMid->next;
pHead->next = nullptr;
pMid->next = pFront;
while (pRear) {
pFront = pMid;
pMid = pRear;
pRear = pMid->next;
pMid->next = pFront;
}
return pMid;
}
};