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

中职学校网站建设的厂家营销网站

中职学校网站建设的厂家,营销网站,免费做网站安全吗,天津高端模板建站核心考点预览:链表 (双指针) 技巧:虚拟头结点 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入输出示例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/493834.html

相关文章:

  • 青岛有名的互联网公司seo必备工具
  • 外贸网站seo优化方案磁力狗在线
  • 天津建设监理协会网站深圳营销型网站开发
  • 金华网站制作案例互联网品牌的快速推广
  • 自己架设的传奇怎么做网站关键词查询网站
  • Vantage wordpress主题青岛seo杭州厂商
  • 做木工的网站1688精品货源网站入口
  • 成都网站开发建设googleseo服务公司
  • 怎么查看网站用什么做的自己接单的平台
  • 建一个政府网站百度推广一个月多少钱
  • 如何分析网站设计长春seo排名外包
  • 欧美做电影 迅雷下载网站百度收录快的发帖平台
  • 宁波专业建设网站建站公司正规赚佣金的平台
  • 广州站西手表北京seo公司哪家好
  • 四川全网推网络推广西安百度seo推广
  • 建设网站都需要下载那些软件武汉搜索推广
  • 中山币做网站公司seo网站优化培训厂家报价
  • 网站可以做的线下活动上海做推广的引流公司
  • 大型网站后台用什么语言广州seo顾问
  • wordpress文件夹权限设置郑州seo网站关键词优化
  • 辽源市建设局网站市场调研的五个步骤
  • 万网官网登录入口朝阳seo
  • 免费微信网站建设百度指数的需求指数
  • 网站建设风险管理最佳的资源磁力搜索引擎
  • 武强营销型网站建设费用加拿大搜索引擎
  • 做购物网站支付需要怎么做国家培训网官网
  • 网站开发工具 下载百度推广热线电话
  • 海洋专业做网站二十条疫情优化措施
  • 专业营销型网站建设深圳网络营销推广中心
  • 推销什么企业做网站和app6怎么建公司网站