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

平度168网站建设移动互联网 传统网站

平度168网站建设,移动互联网 传统网站,进入百度app查看,wordpress选图框前言 简单 √ 本科数据结构课上的题,但是忘了怎么建虚拟表头,-_-||。 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出&…

前言

简单 √ 本科数据结构课上的题,但是忘了怎么建虚拟表头,-_-||。

题目

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

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

思路

对比两个链表的节点值,把小的插入到答案链表里,最后把剩余的链表全部插入到末端。

我的题解

/*** 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) {ListNode dummy(0);ListNode* ans = &dummy;while (list1 && list2){cout<<list1->val<<" "<<list2->val<<endl;if (list1->val <= list2->val){ans->next = list1;list1 = list1->next;}else{ans->next = list2;list2 = list2->next;}ans = ans->next;}if (list1){ans->next = list1;}else if (list2){ans->next = list2;}return dummy.next;}
};

官方题解

递归

我们可以如下递归地定义两个链表里的 merge 操作(忽略边界情况,比如空链表等):


list1[0]+merge(list1[1:],list2)
list2[0]+merge(list1,list2[1:])
​    
  
list1[0]<list2[0]
otherwise
​    
 
也就是说,两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合并。

算法

我们直接将以上递归过程建模,同时需要考虑边界情况。

如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。

class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if (l1 == nullptr) {return l2;} else if (l2 == nullptr) {return l1;} else if (l1->val < l2->val) {l1->next = mergeTwoLists(l1->next, l2);return l1;} else {l2->next = mergeTwoLists(l1, l2->next);return l2;}}
};

虚拟表头

建虚拟表头的两个方法,ListNode* preHead = new ListNode(-1); ListNode* prev = preHead;和 ListNode dummy(0);ListNode* ans = &dummy;

这两种方式的选择取决于具体需求:

  • 动态分配 (new)
    • 使用 new 会将虚拟头节点分配在堆上,生命周期由程序员控制(需要手动释放内存)。
    • 如果链表操作完成后不需要再访问虚拟头节点,可以用这种方式。
  • 栈上分配
    • 将虚拟头节点分配在栈上,函数结束时会自动销毁,无需手动管理内存。
    • 更加安全且高效,推荐在大多数情况下使用。

心得

记住虚拟表头了。


文章转载自:

http://ZmAdMpsn.fLwwf.cn
http://4dzpXKN5.fLwwf.cn
http://lvjVUZIG.fLwwf.cn
http://dBvOk1GP.fLwwf.cn
http://i42RGVBe.fLwwf.cn
http://7NpZmH5t.fLwwf.cn
http://6NsdefZH.fLwwf.cn
http://gHet3w3b.fLwwf.cn
http://i5RNPE9b.fLwwf.cn
http://gespLbLK.fLwwf.cn
http://iPS4kkMb.fLwwf.cn
http://OyQ4EBcH.fLwwf.cn
http://zLx8w8N5.fLwwf.cn
http://CkHFWxJh.fLwwf.cn
http://gvgLuPGQ.fLwwf.cn
http://UF69gbxC.fLwwf.cn
http://YEluTlCx.fLwwf.cn
http://iRImS27E.fLwwf.cn
http://HjZZs1ks.fLwwf.cn
http://MsDfllvg.fLwwf.cn
http://Ym4l6our.fLwwf.cn
http://mdRVa6Pf.fLwwf.cn
http://ZgRV0Qti.fLwwf.cn
http://biM8RXib.fLwwf.cn
http://IEt0AuXW.fLwwf.cn
http://tctghSNC.fLwwf.cn
http://v1D73Tzq.fLwwf.cn
http://5mU20FZz.fLwwf.cn
http://g9TR9gRZ.fLwwf.cn
http://gofzVThp.fLwwf.cn
http://www.dtcms.com/wzjs/758192.html

相关文章:

  • 网站购买空间信阳百度推广公司电话
  • 网站适配手机怎么做网站怎么做双机房切换
  • 电商网站建设价格低wordpress更改邮箱
  • 网站建设个人职责网络推广专员是干嘛的
  • 网站建设的经济可行性分析网络营销策略ppt
  • 某个网站做拍卖预展的好处廊坊seo建站
  • h5做的分销网站网页访问自动跳转中
  • 如何使用上线了app建设网站vs2008 手机网站开发
  • 网站建设结构分布网络培训课堂app
  • 动漫网站建设总结网站做seo
  • wordpress 外贸站主题网页设计制作网站素材
  • 做技术一般逛那些网站黄山地区建设行业网站
  • 网站管理后台文章排序百度招聘平台
  • 实业有限公司网站怎么做wordpress企业建
  • seo网站建设方案以数字域名为网址的网站
  • 做电脑网站步骤seo课程培训学校
  • 揭阳模板建站开发公司网络营销工具与方法
  • 建设公司与建筑公司的区别上海哪学网站建设优化
  • 音乐网站可以用什么语言做电子商务网站建设成都
  • 手机网站做静态路径网站开发工具
  • 网站制作怎样容易新密做网站公司
  • 做招聘网站需要人力资源许可外贸网站有什么
  • 个人做网站的流程外贸网站有哪些平台
  • 云建网站网址做网站效果
  • 云主机建网站做娃衣的布料去哪个网站
  • 潍坊网站制作维护建站系统cms
  • 在什么网站做外贸潍坊市房屋和城乡建设局网站
  • 网络文化经营许可证怎么办杭州seo托管公司推荐
  • 网站开发环境怎么写毕业设计静态网站建设选题依据
  • 白名单 网站南京哪家做网站好