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

每日算法题【链表】:链表的中间节点、返回倒数第k个节点、合并两个有序链表

(8) 返回链表的中间节点
  • [876. 链表的中间结点 - 力扣(LeetCode)]:

  • 解题思路:

    使用快慢指针,快指针走两步,慢指针走一步,快指针指向空,慢指针所指向的节点就是中间节点

    /*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*///使用快慢指针,快指针走两步,慢指针走一步,快指针指向空,慢指针所指向的节点就是中间节点
    struct ListNode* middleNode(struct ListNode* head) {//定义两个指针struct ListNode* fast = head;struct ListNode* slow = head;//循环条件判断:fast->next不能放在前面,因为如果链表是偶数个节点,fast最后一次会直接走到空while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;
    }
    

(9)输入一个链表,输出该链表中倒数第k个结点
  • [面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)]:

  • 解题思路:

    定义两个前后指针,之间相差k步,当后指针指为空的时候,前指针所指向的节点就是目标节点。

    /*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
    //定义两个前后指针,之间相差k步,当后指针指为空的时候,前指针所指向的节点就是目标节点。int kthToLast(struct ListNode* head, int k) {struct ListNode *first = head;struct ListNode *last = head;// 先让last向前移动k步for (int i = 0; i < k; i++) {if (last == NULL) {return -1; // 处理k大于链表长度的情况}last = last->next;}// 然后first和last一起移动,直到last为NULLwhile (last != NULL) {first = first->next;last = last->next;}return first->val;
    }
    

(10)合并两个有序链表
  • [21. 合并两个有序链表 - 力扣(LeetCode)]:

  • 解题思路:

    循环遍历比较两个链表,谁小谁就尾插到新链表当中,谁尾插谁加加,最后再判断一下有没有没比的,全放在新链表的最后

    /*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
    struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {// 创建一个虚拟头节点struct ListNode dummy;struct ListNode* tail = &dummy;dummy.next = NULL;// 循环遍历比较while(list1 && list2){if(list1->val < list2->val){tail->next = list1;list1 = list1->next;} else {tail->next = list2;list2 = list2->next;}tail = tail->next;}// 连接剩余节点if(list1 != NULL){tail->next = list1;} else {tail->next = list2;}return dummy.next;
    }
    
http://www.xdnf.cn/news/18545.html

相关文章:

  • MySQL优化器追踪(Optimizer Trace)详解
  • APIs基础one
  • docker的数据管理
  • Java试题-选择题(16)
  • 论文阅读:arxiv 2025 Can You Trick the Grader? Adversarial Persuasion of LLM Judges
  • selenium采集数据怎么应对反爬机制?
  • Python爬虫实战:研究WSL技术,构建跨平台数据采集和分析系统
  • 从人工巡检到智能监测:工业设备管理的颠覆性变革
  • Selenium
  • 系统思考:突破复杂困境
  • 随机森林2——集成学习的发展
  • EPWpy 安装教程
  • 如何解决 pyqt5 程序“长时间运行失效” 问题?
  • 爬小红书图片软件:根据搜索关键词,采集笔记图片、正文、评论等
  • 在云服务器中使用tmux实现程序24小时运行
  • daily notes[4]
  • Sqlserver存储过程
  • Python入门:从零开始的编程之旅
  • git实战问题(6)git push 时发现分支已被更新,push失败了怎么办
  • GaussDB 数据库架构师修炼(十八) SQL引擎-解析器
  • 学习游戏制作记录(合并更多的技能与技能树)8.23
  • [e3nn] 模型部署 | TorchScript JIT | `@compile_mode`装饰器 | Cython
  • 老年常见疾病及健康管理建议
  • 精斗云智能开单解决方案:高效移动办公新体验
  • Qt/C++开发监控GB28181系统/录像文件回放/自动播放下一个录像文件/倍速回放/录像文件下载
  • openharmony之一多开发:产品形态配置讲解
  • 使用自制的NTC测量模块测试Plecs的热仿真效果
  • 分布式蜜罐系统的部署安装
  • 微服务统一入口——Gateway
  • Redis 从入门到精通:原理、实战与性能优化全解析