当前位置: 首页 > article >正文

408算法题leetcode--第14天

92. 反转链表 II

  • 92. 反转链表 II
  • 思路:头插法
  • 时间:O(n);空间:O(1)
/**
 * 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) {
        // 头插法
        if(head == nullptr) return nullptr;
        ListNode* dummy_head = new ListNode(-1, head);
        ListNode* p = dummy_head;
        for(int i = 0; i < left - 1; i++){
            p = p->next;
        }
        ListNode* cur = p->next;
        ListNode* next = nullptr;
        for(int i = 0; i < right - left; i++){
            next = cur->next;
            cur->next = next->next;
            next->next = p->next;
            p->next = next;
        }
        return dummy_head->next;
    }
};

21. 合并两个有序链表

  • 21. 合并两个有序链表
  • 时间:O(n+m);空间:O(1)
/**
 * 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* mergeTwoLists(ListNode* list1, ListNode* list2) {
        if(list1 == nullptr) return list2;
        if(list2 == nullptr) return list1;
        ListNode* p = list1, *q = list2;
        ListNode* dummy_head = new ListNode(-1);
        ListNode* t = dummy_head;
        while(q && p){
            if(q->val <= p->val){
                t->next = q;
                q = q->next;
            } else {
                t->next = p;
                p = p->next;
            }
            t = t->next;
        }
        t->next = q == nullptr ? p : q;
        return dummy_head->next;
    }
};

24. 两两交换链表中的节点

  • 24. 两两交换链表中的节点
  • 思路:类似之前的头插法
  • 时间:O(n);空间:O(1)
/**
 * 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* swapPairs(ListNode* head) {
        if(head == nullptr) return head;
        ListNode* dummy_head = new ListNode(-1, head);
        ListNode* pre = dummy_head, *cur = dummy_head->next;
        ListNode* next = nullptr;
        while(cur && cur->next){
            next = cur->next;
            // 头插法
            cur->next = next->next;
            next->next = pre->next;
            pre->next = next;
            // 向后移动
            pre = cur;
            cur = cur->next;
        }
        return dummy_head->next;
    }
};

876. 链表的中间结点

  • 876. 链表的中间结点
  • 思路:快慢指针
  • 时间:O(n);空间:O(1)
/**
 * 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* middleNode(ListNode* head) {
        // 快慢指针:快指针走2步,慢指针走1步
        ListNode* fast = head, *slow = head;
        while(fast && fast->next){
            slow = slow->next;
            fast = fast->next->next;
        }
        return slow;
    }
};

http://www.kler.cn/a/320730.html

相关文章:

  • 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--完善TODO标记的代码
  • latex中,两个相邻的表格,怎样留一定的空白
  • 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测
  • 【网络安全】XSS注入
  • 算法日记 26-27day 贪心算法
  • 如何让手机ip变成动态
  • Git 版本控制--git restore和git reset
  • 大数据Flink(一百二十三):五分钟上手Flink MySQL连接器
  • SQLServer TOP(Transact-SQL)
  • 【C++类的设计】题目(二):设计圆柱Column类
  • 【NLP】循环神经网络--RNN学习.day3
  • Rust编程的if选择语句
  • HTML中的表单(超详细)
  • pycirclize python包画circos环形图
  • .net 未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=6.0.0.1 解决方案
  • OpenCV运动分析和目标跟踪(4)创建汉宁窗函数createHanningWindow()的使用
  • C++速通LeetCode中等第20题-随机链表的复制(三步简单图解)
  • 优化算法(四)—蚁群算法(附MATLAB程序)
  • spark的stage划分的原理
  • 如何完成一个每天自定义的主题,然后提出该主题的100个问题,然后自动完成。使用playwright
  • Chroma 向量数据入门
  • zico2打靶记录
  • 结合人工智能,大数据,物联网等主流技术实现业务流程的闭环整合的名厨亮灶开源了
  • Ubuntu上安装Git:简单步骤指南
  • vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)
  • XML:DOM4j解析XML