题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:0 <= 节点个数 <= 5000
解题思路
1、在反转一个节点的next指向之前,首先要保存该点的next节点指针;
2、然后将当前节点的next指针指向前一个节点(反转前的);
3、接着将当前节点指针作为前置节点指针;
4、更新当前节点为下一个新节点;
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(nullptr == head) return nullptr;
ListNode* pre = nullptr; //前置指针
ListNode* next = nullptr; //后置指针
ListNode* current = head; //当前指针
while(nullptr != current) {
next = current->next; //保存下一个节点
current->next = pre; //将当前节点的next指向前一个节点(调转指针指向方向)
pre = current; //将当前指针作为前指针
current = next; //更新下一个节点为当前节点
}
return pre;
}
};
执行结果: