
数据结构:
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) {}
};
解题思路:
1.链表的反转需要将链表翻转过来,意思是:将最后一个节点作为首节点,将倒数第二个节点作为第二个节点,将倒数第三个节点作为第三个节点……

2.思路:遍历链表,每遍历一个节点,就将这个节点拿出来,组成一个新链表

3.使用头插法的思想,定义两个指针 pre 和 cur 用pre 指向新链表的第一个节点,用cur指向旧链表的第一个节点,将每次拿出来的节点插到第一个节点的位置

算法:
class Solution {
public:
ListNode* reverseList(ListNode* head)
{
ListNode* pre = nullptr;
ListNode* cur = head;
while (cur != nullptr)
{
ListNode* nextNode = cur->next; //保存下一个节点
cur->next = pre; //链表反转
//移动到下一个节点
pre = cur;
cur = nextNode;
}
return pre;
}
};
结果:

120

被折叠的 条评论
为什么被折叠?



