描述
思路
解法一:双指针迭代(推荐)
step1: 定义pre指向pHead前一个结点、next指向pHead下一个结点
step2: 通过头指针的移动来不断使用pre、pHead、next指针进行方向逆转,直到pHead == nullptr
step3: 此时退出循环,pre指向最后一个结点,也就是反转后的头结点
C++实现代码
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* pre = nullptr;
ListNode* next = pHead->next;
while(pHead != nullptr)
{
next = pHead->next;
pHead->next = pre;
pre = pHead;
pHead = next;
}
return pre;
}
};
时间复杂度O(n)
空间复杂度O(1)