题目
思路
-
使用双指针,不新建内存空间存放结点,而是将结点的指向改变
图源代码随想录,侵删
-
注意pre、cur的指向问题
-
cur->next在一次next调换后会变,新建指针指向前cur->next结点位置
-
该新建指针就新建,不要吝啬
-
一个问题:return 头指针=在返回值为Linknode*的函数中返回所有结点的val(?
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//初始化两个结点指针,一直指向头结点之前的空结点位置,一个是头结点
ListNode* pre = nullptr;
ListNode* cur = head;
//新建指针指向cur->next结点
ListNode* tmp = nullptr;
//把结点的next指向前一个结点
while(cur != nullptr)
{
tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
};