剑指offer-刷题笔记-简单题-JZ24 反转链表
错在没有单独把节点取出来,然后链接,把指针想成单独节点了,一直在纠结如何把后一个节点链接前一个节点,然后全部连起来
版本1-自己写的错误
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* beforeHead = new ListNode(0);
beforeHead->next = pHead;
ListNode* temp;
ListNode* temp1;
if(!pHead)
{
return NULL;
}
while(pHead->next != NULL)
{
//temp = pHead->next;
//temp1 = beforeHead->next;
//temp->next = temp1;
pHead = pHead->next;
beforeHead = beforeHead->next;
}
return temp1;
}
};
版本2-正确
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *pre = nullptr;//指向反转链表的最后一个节点,开始指向nullptr
ListNode *cur = pHead;//指向待反转链表的第一个节点,开始指向pHead
ListNode *nex = nullptr; // 这里可以指向nullptr,循环里面要重新指向
while (cur) {
nex = cur->next;//单独取出当前节点(指的是每次把该节点与后面的链表断开,使的其变为单独节点)
cur->next = pre;//将单独节点依次连接到反转链表中
pre = cur;
cur = nex;//待反转链表遍历
}
return pre;
}
};