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

卫计委社会信用体系建设网站优化系统软件

卫计委社会信用体系建设网站,优化系统软件,网页设计与制作教程第5版,厦门网站制作方案核心考点预览:链表 (双指针) 技巧:虚拟头结点 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入输出示例1l1 [1,2,4], l2 [1…

核心考点预览:链表 (双指针)  技巧:虚拟头结点

题目描述:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入输出
示例1l1 = [1,2,4], l2 = [1,3,4][1,1,2,3,4,4]
示例2l1 = [], l2 = [][]
示例3l1 = [], l2 = [0][0]

提示:

•      两个链表的节点数目范围是 [0, 50]

•      -100 <= Node.val <= 100

•      l1 和 l2 均按 非递减顺序 排列

详细解答:

// 定义链表节点结构
struct ListNode {int val; // 节点值struct ListNode *next; // 下一个节点指针
};// 合并两个升序链表
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {struct ListNode *p1 = list1, *p2 = list2; // 初始化指向两个链表的指针struct ListNode* res = (struct ListNode*)malloc(sizeof(struct ListNode)); // 结果链表头节点struct ListNode* p = res; // p指针用于构建结果链表// 遍历两个链表,逐个比较节点值,合并到结果链表while (p1 != NULL && p2 != NULL) {// 如果list1当前节点小于list2当前节点if (p1->val < p2->val) {p->next = p1; // 将list1的当前节点链接到结果链表p = p1; // 更新p指针,指向list1当前节点p1 = p1->next; // list1向后移动一位} // 如果list1当前节点等于list2当前节点else if (p1->val == p2->val) {p->next = p1; // 将list1的当前节点链接到结果链表p = p1; // 更新p指针,指向list1当前节点p1 = p1->next; // list1向后移动一位p->next = p2; // 将list2的当前节点链接到结果链表p = p2; // 更新p指针,指向list2当前节点p2 = p2->next; // list2向后移动一位}// 如果list2当前节点小于list1当前节点else {p->next = p2; // 将list2的当前节点链接到结果链表p = p2; // 更新p指针,指向list2当前节点p2 = p2->next; // list2向后移动一位}}// 如果list1遍历完,直接将剩余的list2链接到结果链表if (p1 == NULL) {p->next = p2;}// 如果list2遍历完,直接将剩余的list1链接到结果链表if (p2 == NULL) {p->next = p1;}// 返回合并后的链表,从res->next开始return res->next;
}

这么写中间有些繁琐,我们可以如此修改:

// 定义链表节点结构
struct ListNode {int val; // 节点值struct ListNode *next; // 下一个节点指针
};// 合并两个升序链表
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {struct ListNode *p1 = list1, *p2 = list2; // 初始化指向两个链表的指针struct ListNode* res = (struct ListNode*)malloc(sizeof(struct ListNode)); // 结果链表头节点struct ListNode* p = res; // p指针用于构建结果链表// 遍历两个链表,逐个比较节点值,合并到结果链表while (p1 != nullptr && p2 != nullptr) {// 比较 p1 和 p2 两个指针// 将值较小的的节点接到 p 指针if (p1->val > p2->val) {p->next = p2;p2 = p2->next;} else {p->next = p1;p1 = p1->next;}// p 指针不断前进p = p->next;}// 如果list1遍历完,直接将剩余的list2链接到结果链表if (p1 == NULL) {p->next = p2;}// 如果list2遍历完,直接将剩余的list1链接到结果链表if (p2 == NULL) {p->next = p1;}// 返回合并后的链表,从res->next开始return res->next;
}

思路分析

  • 链表合并:合并两个升序链表,关键在于逐个比较两个链表的节点,将较小的节点添加到结果链表中。

  • 时间复杂度:由于两个链表都是升序的,每次合并操作都可以直接选取较小的元素,因此该方法的时间复杂度为 O(n + m),其中 nm 分别是两个链表的长度。

考点分析

  1. 链表操作:熟悉链表的遍历和合并操作。

  2. 指针操作:如何通过指针操作将两个链表合并为一个新链表。

  3. 边界情况:处理其中一个链表为空的情况,确保代码的健壮性。

http://www.dtcms.com/wzjs/199986.html

相关文章:

  • 做搜狗手机网站优化点网站建设流程是什么
  • 微网站制作公司网站自动提交收录
  • 音乐网站模板下载谷歌官方app下载
  • h5作品网站福州短视频seo获客
  • 怎样可以免费做网站口碑营销案例及分析
  • ipv6地址可以做网站吗百度指数是搜索量吗
  • 网站建设 上市公司痘痘该如何去除效果好
  • 福州响应式网站中文域名交易平台
  • 免费wap网站制作网络营销的效果是什么
  • 多合一网站建设吸引人气的营销方案
  • 网站建设困难吗百度链接收录
  • 昆山城市建设网站项目平台
  • 销售做网站网站收录量
  • win10做网站服务器百度账户推广登陆
  • 网站维护与建设考试深圳百度推广seo公司
  • 太原有哪些做网站的公司谷歌搜索引擎在线
  • 网站开发框架的工具京东关键词优化技巧
  • 网站建设学费多少钱产品免费推广网站有哪些
  • 聊城网站建设方案网络营销的类型有哪些
  • 杭州电子商务网站开发山东百搜科技有限公司
  • 永康企业网站建设公司建站系统源码
  • 凡科建站怎么删除模块建个网站费用多少
  • 网店代运营排行惠东seo公司
  • wordpress 更改插件目录重庆网站seo好不好
  • 企业网站认证搜索引擎网站优化推广
  • 赣州网站建设.com推广一手渠道
  • 哪个网站是做安全教育百度总部
  • 公司为什么做网站批量查询权重
  • 做初中数学题的网站东莞网站提升排名
  • 青岛专门做网站的公司有哪些竞猜世界杯