描述

在这里插入图片描述

思路

解法一:双指针迭代(推荐)

step1: 定义pre指向pHead前一个结点、next指向pHead下一个结点
step2: 通过头指针的移动来不断使用pre、pHead、next指针进行方向逆转,直到pHead == nullptr
step3: 此时退出循环,pre指向最后一个结点,也就是反转后的头结点

C++实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)