代码分为两部分,头部定义和代码反转部分。
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
}
};


京公网安备 11010502036488号