206. 反转链表(Leetcode刷题笔记 迭代法)
题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
输入:head = [1,2]
输出:[2,1]
输入:head = []
输出:[]
解题代码
迭代法
class Solution:{
public
ListNode*reverseList(ListNode*head){
//1->2->3->4->5
//null<-1<-2<-3<-4<-5
ListNode* curr=head;
ListNode* prev=null;
//从头结点开始向后走
while(curr){
//next 指向的是前一个结点
ListNode*temp=curr->next;
curr->next=prev;
//更新prev,prev向后走一步
prev=curr;
//更新curr,curr向后走一步
curr=temp;
}
return prev;
}
};
代码效率
执行用时: 8 ms , 在所有 C++ 提交中击败了63.03% 的用户
内存消耗:8.1 MB , 在所有 C++ 提交中击败了 67.79% 的用户
复杂度分析
时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。
空间复杂度:O(1)。