链表翻转的代码 看不懂

 class Solution {
public:
    /**
     * @param head: The first node of linked list.
     * @return: The new head of reversed linked list.
     */
    ListNode *reverse(ListNode *head) {
        ListNode *prev = NULL;
        while (head != NULL) {
            ListNode *temp = head->next;
            head->next = prev;
            prev = head;
            head = temp;
        }
        return prev;
    }
};

实在是不理解,希望大神可以帮忙分析一下

读取第一个节点,head
将head的下一个节点存入temp
读取再下一个节点prev
将head作为新的temp
这样遍历完成,最后一个prev就是新的链表头,而它和它之前节点的next已经从后继节点纠正为前驱结点,也就是翻转了链表

图片说明

这是参考大家的回答 我自己分析的草图 谢谢图片说明图片