题目来自力扣单链表剑指offer试题
图来自力扣剑指offer
复杂度分析:
- 时间复杂度 O(N) : 遍历链表使用线性大小时间。
- 空间复杂度 O(1) : 变量
pre
和cur
使用常数大小额外空间。
实现步骤说明:
1.定义2个指针一个pre,一个cur(pre初始化成空,cur初始化成头指针);
2.定义一个临时变量存储cur->next;
3.pre用来临时存储cur指针地址;
4.cur后移,即将tmp赋值给cur,循环进行,直到链表全部反转
5.循环结束,返回pre(完成后的头指针)
代码演示:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *cur=head; //创建cur指针
ListNode *pre=nullptr; //创建pre指针
while(cur!=nullptr) //判空,当cur指向空时,链表反转完毕
{
ListNode* tmp =cur->next; //临时指针tmp暂存下一节点
cur->next=pre; //更改next指向,反向
pre=cur; //pre存cur
cur=tmp; //继续下一节点
}
return pre;
}
};