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

临朐网站制作网站维护费用

临朐网站制作,网站维护费用,空间ip地址访问网站,苏州相城区网站建设题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] 输出&…

题目

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

示例

示例 1:

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

示例 2:

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

示例 3:

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

分析

迭代法

我们使用一个虚拟头节点(dummy node)。这个节点不存储实际数据,只是为了方便操作,它的 next 指针将指向合并后的链表的头节点。

逐步比较两个链表的当前节点,将较小的节点连接到 tail 后面,并移动相应的链表指针。当一个链表遍历完后,直接将另一个链表的剩余部分连接到新链表的末尾。

时间复杂度:O(n+m), n 和 m 分别为两个链表的长度

空间复杂度:O(1)

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {// 创建一个虚拟头节点ListNode dummy;ListNode* tail = &dummy;// 比较两个链表的节点,按顺序连接到新链表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) {tail->next = list1;} else {tail->next = list2;}// 返回合并后的链表return dummy.next;}
};

递归法

每次递归调用返回合并后的链表的头节点。通过递归调用栈,逐层返回合并后的链表,最终返回完整的合并链表。

时间复杂度:O(n+m), n 和 m 分别为两个链表的长度

空间复杂度:O(n+m)

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {// 递归终止条件if (!list1) return list2;if (!list2) return list1;// 递归合并if (list1->val < list2->val) {list1->next = mergeTwoLists(list1->next, list2);return list1;} else {list2->next = mergeTwoLists(list1, list2->next);return list2;}}
};

知识充电

链表

节点定义

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) {}
};

初始化

// 创建链表节点
ListNode* node1 = new ListNode(1);
ListNode* node2 = new ListNode(2);
ListNode* node3 = new ListNode(3);// 连接节点形成链表: 1 -> 2 -> 3
node1->next = node2;
node2->next = node3;// node1是链表的头节点
ListNode* head = node1;

遍历链表

void printList(ListNode* head) {ListNode* current = head;while (current != nullptr) {std::cout << current->val << " ";current = current->next;}std::cout << std::endl;
}

插入节点

void insertAtEnd(ListNode*& head, int value) { //在链表的末尾插入一个新节点ListNode* newNode = new ListNode(value);if (!head) {head = newNode;return;}ListNode* current = head;while (current->next != nullptr) {current = current->next;}current->next = newNode;
}

删除节点

void deleteNode(ListNode*& head, int value) { //删除链表中第一个值为value的节点if (!head) return;if (head->val == value) {ListNode* temp = head;head = head->next;delete temp;return;}ListNode* current = head;while (current->next && current->next->val != value) {current = current->next;}if (current->next) {ListNode* temp = current->next;current->next = current->next->next;delete temp;}
}
http://www.dtcms.com/wzjs/285647.html

相关文章:

  • 天津市城乡和住房建设厅网站搜索引擎营销的分类
  • 成都购物网站设计电子商务营销
  • 中国做的儿童编程网站现在推广什么app最挣钱
  • 动力做网站视频app推广
  • 台州地区网站建设爱站网站长seo综合查询
  • html5手机网站特效seo优化关键词排名优化
  • 成都网站原创推广普通话的意义论文
  • 做网站和做java的区别西安竞价推广托管
  • 图片网站 seo百度百家号注册
  • 大学学风建设网站上海哪家优化公司好
  • 微企申请网站优就业seo
  • 北京短视频代运营公司芭嘞seo
  • 天河企业网站建设seo和sem推广
  • 佛山市个性网站建设设计公司百度客服24小时电话
  • 在tomcat部署wordpress班级优化大师下载安装
  • 北京企业网站设计制作福州网站优化公司
  • 汶上做网站国家职业技能培训学校
  • 网站建设案列百度地图导航
  • 淄博网站建设多少钱专门做网站的公司
  • 台州工程建设信息网站品牌传播推广方案
  • wordpress文章相关推荐天津百度seo
  • 优秀网站建设方案制作公司网站的步骤
  • 邢台做网站邮箱上海外贸seo
  • 想做网站找哪个公司好如何给公司做网络推广
  • 网站建设整个过程百度seo价格
  • 小程序代理加盟有哪些大品牌淘宝关键词优化
  • 易企互联网站建设长沙网红打卡景点排行榜
  • 个人网站做什么内容好重庆seo招聘
  • 手机网站排名优化网络营销管理系统
  • 2017年网站建设市场分析临沂seo公司