代码分为两部分,头部定义和代码反转部分。
1.结构体 ListNode里面两个成员变量int val,struct ListNodenext.
*代表是个指针变量,前面要加struct因为这是结构体,并且ListNode没有被typedef
内涵一个成员函数,可以创建一个指向空,值为x的结点指针,不是结点而是指针。
关于NULL和nullptr:为解决NULL代指空指针存在的二义性问题,在C++11版本(2011年发布)中特意引入了nullptr这一新的关键字来代指空指针,从上面的例子中我们可以看到,使用nullptr作为实参,确实选择了正确的以void
作为形参的函数版本。
2.反转类一般创建三个辅助结点,前一个,当前,下一个。

/*
struct ListNode {
int val;
struct ListNode next;
ListNode(int x) :
val(x), next(NULL) {
}
};
/

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        ListNode* pReversedHead=nullptr;//这个其实可以不用
        ListNode* pNode=pHead;
        ListNode* pPrev=nullptr;
        while(pNode!=nullptr)//这里改为pNext!=nullptr,这边用NULL和题契合一点。
        {
            ListNode* pNext=pNode->next;

            if(pNext==nullptr)
                pReversedHead=pNode;

            pNode->next=pPrev;

            pPre***ode;
            pNode=pNext;
        }
        return pReversedHead;//这边直接返回pNext

    }
};