国内网站建设 必须实名认证,成都一网吃尽小程序,阿里云网站建设服务费会计科目,推广普通话写好规范字手抄报目录
题目#xff1a;
示例#xff1a;
分析#xff1a;
代码#xff1a; 题目#xff1a; 示例#xff1a; 分析#xff1a;
题目给我们两个有序的链表#xff0c;要我们保持升序的状态合并它们。
我们可以马上想要把两个链表都遍历一遍#xff0c;把所有节点的…目录
题目
示例
分析
代码 题目 示例 分析
题目给我们两个有序的链表要我们保持升序的状态合并它们。
我们可以马上想要把两个链表都遍历一遍把所有节点的值都放入一个容器里排序之后再创建一个新的链表。
但是第一题目是要求拼接链表的节点而这么做的话有点小犯规。
第二就是没有利用到原本两个链表就是升序的这个特点。
要利用到原本链表升序的特点我们就需要从左往右依次对两个链表的节点做比较将较小的节点排到新链表的前面因为两个链表原本就是升序的所以这么做最终合并成的新链表也是升序的。
我们需要定义一个新链表的头然后进入一个while的循环循环条件是两个链表至少有一个不为空指针如果其中一个为空指针那么新链表的下一个节点直接连上另一个链表然后退出循环。
如果两个链表都不为空指针那么我们就需要对比一下他们节点的值取一个较小的作为新链表的下一个节点。
如此循环直到最后我们就可以获取到合并两个升序链表后的新升序链表了。 代码
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* resnew ListNode(0,nullptr);ListNode* curres;while(list1!nullptr||list2!nullptr){if(list1nullptr){cur-nextlist2;break;}else if(list2nullptr){cur-nextlist1;break;}if(list1-vallist2-val){cur-nextlist1;curcur-next;list1list1-next;}else{cur-nextlist2;curcur-next;list2list2-next;} }return res-next;}
};