反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;//前一个节点
ListNode* curr = head;//当前节点
while (curr) {
ListNode* next = curr->next;//获取当前节点的下一个节点
curr->next = prev;//当前节点指向前一个节点:反转方向
prev = curr;//当前节点赋值给前一个节点
curr = next;//下一个节点赋值给当前节点
}
return prev;//此时为新的头节点
}
};
复杂度分析
时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。
空间复杂度:O(1)。
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。