给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

    示例 1:

    206反转链表 - 图1

    1. 输入:head = [1,2,3,4,5]
    2. 输出:[5,4,3,2,1]

    示例 2:

    206反转链表 - 图2

    输入:head = [1,2]
    输出:[2,1]
    

    示例 3:

    输入:head = []
    输出:[]
    

    提示:

    • 链表中节点的数目范围是 [0, 5000]
    • -5000 <= Node.val <= 5000

    进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

    class Solution {
    public:
    
        ListNode* reverseList(ListNode* head) {
            ListNode* temp; // 保存cur的下一个节点
            ListNode* cur = head;
            ListNode* pre = NULL;
            while(cur) {
                temp = cur->next;  // 保存一下 cur的下一个节点,因为接下来要改变cur->next
                cur->next = pre; // 翻转操作
                // 更新pre 和 cur指针
                pre = cur;
                cur = temp;
            }
            return pre;
        }
    };