https://leetcode.cn/problems/reverse-linked-list/
思想:
在遍历链表时,将当前节点的next指针改为指向前一个节点。
由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。
在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
/**
* 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)
{
// 注意:head指针的指向也要改变!(即head应该最终指向nullptr)
ListNode *p = nullptr; // p永远指向q结点的前趋结点
ListNode *q = head;
while(q != nullptr)
{
ListNode *next = q->next; // 必须借助next找到原来的next结点
// 否则反转指针指向后,就找不到原来的next结点了!
q->next = p;
p = q;
q = next;
}
return p;
}
};
可以,么么哒