题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
方法:迭代
算法思想
1.首先,想反转链表,即将链表之间的箭头指向全部逆反过来
2.需要考虑两个问题:(1)将下一个节点的箭头指向前一个节点,那下一个节点怎么存储
(2)由于节点没有引用其前一个节点,必须事先存储其前一个节点。
代码
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr) {
ListNode* n = curr->next;//将下一个静安店事先存储在n中
curr->next = prev;
prev = curr;//逆转箭头
curr = n;//将curr指向先前存储好的下一个节点,循环操作
}
return prev;//返回新链表的头节点
}
};
复杂度分析
时间复杂度:O(n)O(n),其中 nn 是链表的长度。需要遍历链表一次。
空间复杂度:O(1)O(1)。