题目描述
输入一个链表,反转链表后,输出新链表的表头。
---------------------------------------------------------------------------------
思路:
就是定义三个指针,pre指针指向前一个,now指针指向中间,end指针指向后一个
1、先要将now指针保存下来,因为一会反转之后now和end(原链表)之间联系就断了,需要把end给now以找回原链表关系
2、反转链表,将now->next指向pre
3、将现在now给pre
4、将保存下来的end给now
5、当end为空时表明end现在是链表尾结点的下一个nullptr加点,所以现在就输出now指针就可以了,也就是原链表的尾结点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead)
{
if (!pHead)
{
return nullptr;
}
ListNode* reverseNode = nullptr;
ListNode* node_Pre = nullptr;
ListNode* node_Now = pHead;
ListNode* node_end = nullptr;
while (node_Now )
{
node_end = node_Now->next;
if (node_end == nullptr)//这个判断条件必须放在node_end后面,一开始刚在了最后面就不对,
//这就是输出node_now->next 也就是最后一个节点的next,也就是null
{
reverseNode = node_Now;
}
node_Now->next = node_Pre;
node_Pre = node_Now;
node_Now = node_end;
}
return reverseNode;
}
};