力扣 反转链表2-92

发布于:2024-12-18 ⋅ 阅读:(61) ⋅ 点赞:(0)

反转链表2-92

/**
 * 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* reverseBetween(ListNode* head, int left, int right) {
        //如果left=1的情况下会用到虚头节点,以便进行反转
        ListNode* Head = new ListNode();
        Head->next = head;
        
        //左指针首先指向虚头节点,然后for循环走到将要反转的链表(子链表)的前一个结点
        ListNode* LeftPointer = Head;
        for(int i=0;i<left-1;i++)
        {
            LeftPointer = LeftPointer->next;//
        }

        //右指针首先指向虚头节点,然后for循环走到将要反转的链表(子链表)的最后个节点
        ListNode* RightPointer = Head;
        for(int i=0;i<right;i++)
        {
            RightPointer = RightPointer->next;
        }

        //切断出一个子链表
        ListNode* ChildListHead = LeftPointer->next;
        ListNode* ChildListNextCurr = RightPointer->next;

        //反转子链表
        ListNode* cur = NULL;
        ListNode* pre = ChildListHead;
        while(pre!=ChildListNextCurr)
        {
            ListNode* t = pre->next;
            pre->next = cur;
            cur = pre;
            pre = t;
        }

        //将反转后的子链表拼接到原来切断的位置
        LeftPointer->next = cur;
        ChildListHead->next = ChildListNextCurr;
        return Head->next;
    }
};

每日问题

静态链接的特点是什么? 动态链接的特点是什么?

静态链接和动态链接是两种不同的程序链接方式,具有各自的特点。

静态链接的特点:

1.链接时机: 静态链接发生在编译期间,程序的所有外部依赖(如库函数)会在编译时被直接嵌入到生成的可执行文件中。

2.生成的可执行文件: 静态链接生成的可执行文件包含了所有的代码和数据,所有依赖的库文件也都被复制到程序中,因此程序不再依赖外部的库文件。

3.执行效率: 因为所有代码都已经在编译时链接好,所以程序运行时不需要再进行符号解析或加载外部库,执行效率较高。

4.可移植性: 静态链接生成的可执行文件可以在没有目标库的环境中运行,因为它已经将所有依赖打包在一起。

5.文件大小: 由于所有库函数都被包含在内,静态链接的可执行文件通常较大。

6.更新困难: 如果库函数或库文件有更新,程序需要重新编译和链接,才能包含新的库版本。

动态链接的特点:

1.链接时机: 动态链接是在程序运行时进行的。可执行文件中只包含对外部库的引用,而不直接嵌入库的实现代码。

2.依赖外部库: 程序在运行时需要加载动态链接库(DLL 或共享库 .so 文件)。这些库文件可以在程序运行时由操作系统加载和链接。

3.执行效率: 程序启动时需要加载动态库,可能会稍微影响启动速度,但运行过程中会节省内存空间,因为多个程序可以共享同一份库文件。

4.可移植性: 动态链接的程序依赖于外部库文件,如果目标系统缺少所需的库,程序将无法正常运行。

5.文件大小: 动态链接的可执行文件通常较小,因为它不包含库的代码,只保存对库的引用。

6.更新方便: 动态链接使得库文件的更新变得更加方便。只需替换库文件,而不需要重新编译应用程序。所有使用该库的程序都能自动使用更新后的库。

总结:

静态链接的优势是无需外部依赖,运行时加载快,但文件较大且更新不方便。

动态链接的优势是可共享库文件,节省内存和磁盘空间,更新方便,但需要依赖外部库且可能影响程序启动速度。


网站公告

今日签到

点亮在社区的每一天
去签到