题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路:三个指针,最后那个指针防止中间指针指向改变时断链。
C++
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *pre = NULL;
ListNode *mid = NULL;
ListNode *rea = NULL;
if(!pHead) return NULL; //链表长度为0
pre = pHead;
if(!pre->next) return pre; //链表只有头节点
mid = pre->next;
if(!mid->next) //链表有两个节点
{
mid->next = pre;
pre->next = NULL;
return mid;
}
rea = mid->next; //链表节点数大于等于3
while(mid)
{
mid->next = pre;
pre = mid;
mid = rea;
if(rea) rea = rea->next;
}
pHead->next = NULL;
return pre; // 最后中间指针和尾指针均为NULL,头指针指向反转后的首节点
}
};