12.20 - 反转链表II && 传值和传地址的区别

目录

1.反转链表

a.核心思想

b.思路

c.步骤

2.传值和传地址区别,内容会有什么不一样

a.传值

b.传地址


1.反转链表

92. 反转链表 II - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list-ii/description/

cpp 复制代码
/**
 * 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* successor = nullptr;
    ListNode* reverseN(ListNode* head, int n) {
        if (n == 1) {
            successor = head->next;
            return head;
        }
        ListNode* last = reverseN(head->next, n - 1);
        head->next->next = head;
        head->next = successor;
        return last;
    }

    ListNode* reverseBetween(ListNode* head, int left, int right) {
        if (left == 1) {
            return reverseN(head, right);
        }
        head->next = reverseBetween(head->next, left - 1, right - 1);
        return head;
    }
};

a.核心思想

利用递归或迭代的方法,找到需要反转的链表部分的起始节点和结束节点,进行局部反转,并重新连接链表的前后部分。

b.思路

可以采用递归的方法,先递归到需要反转的结束节点的下一个位置,然后从后往前进行节点的反转操作,同时维护好前后链表的连接。

c.步骤

① 如果 left 等于 1,相当于从链表头部开始反转,直接调用反转整个链表的递归函数(反转前 right - left + 1 个节点)。

② 一般情况下,先递归到 left - 1 位置,记录其下一个节点为需要反转部分的头节点。

③ 继续递归到 right 位置,进行局部反转操作,将反转后的链表头节点连接到 left - 1 位置的节点后面。

④ 返回原链表的头节点。

2.传值和传地址区别,内容会有什么不一样

a.传值

传递内容:传递的是实参值的副本。函数内部获得的是与实参值相同但独立的新值。

影响:在函数中对参数的修改不会影响到实参本身。例如,将一个整数传值给函数,函数内对该整数的修改不会改变函数外原变量的值。

b.传地址

传递内容:传递的是实参的地址(指针方式)或对实参的引用(引用方式)。函数内部通过地址或引用直接操作实参所指向的内存。

影响:在函数中对参数的修改会直接影响到实参。比如传递一个指针指向的整数,函数内对该整数内存的修改会反映到函数外原变量上。

简而言之,传值是传数据副本,函数内修改不影响原数据;传地址是传数据位置,函数内修改会影响原数据。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

相关推荐
zander2584 小时前
114. 二叉树展开为链表
数据结构·链表·深度优先
乐观勇敢坚强的老彭4 小时前
信奥C++一维数组笔记
开发语言·c++·笔记
码上有光4 小时前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
变量未定义~4 小时前
最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)
算法
这就是佬们吗4 小时前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
王维同学4 小时前
[原创][Windows C++]Explorer Shell 扩展、图标覆盖与 COM 服务器定位
c++·windows·注册表
LONGZETECH4 小时前
新能源汽车充电设备装配与调试仿真教学软件 技术架构与核心实现解析
大数据·算法·3d·unity·架构·汽车
code_pgf4 小时前
C++ 工程架构设计规范
c++·机器人
自学小白菜4 小时前
关于提升机器学习算法做预测回归任务精度的方法分享
算法·机器学习·回归·提升精度
C++ 老炮儿的技术栈5 小时前
基于MFC+原生GDI手动自绘仪表盘控件
c语言·c++·visual studio·控件·工业控制·gdi·自绘