【刷题日记】链表-反转链表-L206-Easy Chen Shi 刷题日记链表 刷题日记 链表 发布于:2024年6月25日 字数:303 字 时长:1 分钟 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 思路 交换值。栈,遍历 2 遍,时间复杂度 O(n),空间复杂度 O(n) 反转指针 学习点 ans = new ListNode(x.val, ans),当前指向节点A(或 null),构建新节点B,其 next 指针指向节点A(或 null),同时指针指向新节点B 代码 栈: 12345678910111213141516171819202122232425// 栈class Solution {public: ListNode* reverseList(ListNode* head) { // 栈 // 交换 val stack<int> s; // 遍历 2 遍 ListNode *p = head; while (p != nullptr) { s.push(p->val); p = p->next; } ListNode *q = head; while (q != nullptr && !s.empty()) { q->val = s.top(); s.pop(); q = q->next; } return head; }}; 评论区更简单解法: 123456789101112class Solution { public ListNode reverseList(ListNode head) { ListNode ans = nullptr; for (ListNode x = head; x != nullptr; x = x.next) { // 新建 node 的 next 域指向当前 node // ans 指向新建 node // 以此达到反转指针的目的 ans = new ListNode(x.val, ans); } return ans; }} 反转指针: 123456789101112131415161718192021class Solution {public: ListNode* reverseList(ListNode* head) { // pre 指向前驱点 ListNode *pre = nullptr; ListNode *p = head; while (p != nullptr) { // 暂存下一个节点的指针 ListNode *p_next = p->next; // 反转指针 p->next = pre; // 指针移动 pre = p; p = p_next; } return pre; }}; 最后更新于:2025年1月18日 C++ 刷题 链表 C++ 刷题 链表 【刷题日记】链表-两两交换链表中的节点-L24-Medium 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 24. 两两交换链表中的节点 思路 修改指针指向 学... 【刷题日记】链表-设计链表-L707-Medium 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,...