题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

思路:
如果pHead1为NULL但pHead2不为NuLL时,返回pHead2;如果pHead2为NULL但pHead1不为NuLL时,返回pHead1;如果pHead1和pHead2都为NULL时,返回的是最初定义的newHead也为NULL(因为之后的操作都无效),newHead初始化为pHead1->val和pHead2->val中小的那一个的head。循环判断,若pHead1和pHead2都不为NULL时,判断val的大小,用nextNode记录head的下一个位置,更改head的下一个位置为另一个链表的头,并更新head为nextNode。

正确代码:
1.递归法:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2){if(pHead1 == NULL) return pHead2;//如果有一个为空,返回另一个链表if(pHead2 == NULL) return pHead1;if(pHead1->val < pHead2->val) {//如果pHead1的值比pHead2的值小,递归调用pHead1的下一个与pHead2比较pHead1->next = Merge(pHead1->next, pHead2);return pHead1;} else {//反之同理pHead2->next = Merge(pHead2->next, pHead1);return pHead2;}}
};

输出结果:运行时间: <1 ms 占用内存:8552K 状态:答案正确

2.非递归法:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2){if(pHead1 == NULL){//如果有一个为空,直接返回另一个return pHead2;}if(pHead2 == NULL){return pHead1;}ListNode *mergeHead = NULL;//重新构建一个链表的头节点和尾节点ListNode *current = NULL;     while(pHead1!=NULL && pHead2!=NULL){//当两个都不为空时if(pHead1->val <= pHead2->val){//如果pHead1的值比pHead2小于等于if(mergeHead == NULL){//如果mergeHead为空mergeHead = current = pHead1;//头和尾都为pHead1}else{current->next = pHead1;//否则current的下一个为pHead1current = current->next;//current指向当前位置的下一个}pHead1 = pHead1->next;//pHead1也指向下一个}else{//如果pHead1的值比pHead2大时,同理if(mergeHead == NULL){mergeHead = current = pHead2;}else{current->next = pHead2;current = current->next;}pHead2 = pHead2->next;}}if(pHead1 == NULL){//如果pHead1为空了,pHead2剩下的给current的下一个current->next = pHead2;}else{//如果pHead2为空了,pHead1剩下的给current的下一个current->next = pHead1;}return mergeHead;}
};

输出结果:运行时间: <1 ms 占用内存:8552K 状态:答案正确
————————————————————————————————————————
错误代码:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ListNode *newHead=NULL;if(pHead1==NULL){//如果pHead1为NULL但pHead2不为NuLL时,返回pHead2return pHead2;}if(pHead2==NULL){//如果pHead2为NULL但pHead1不为NuLL时,返回pHead1return pHead1;}if(pHead1&&pHead2){//ewHead初始化为pHead1->val和pHead2->val中小的那一个的headnewHead=pHead1->val<pHead2->val?pHead1:pHead2;}while(pHead1&&pHead2){//若pHead1和pHead2都不为NULL时if(pHead1->val<pHead2->val){//判断val的大小,若pHead1->val小ListNode *nextNode1=pHead1->next;//设置一个nextNode1,pHead1的下一个pHead1->next=pHead2;//将pHead1的下一个指向pHead2(另一个的头节点)pHead1=nextNode1;//更新pHead1为nextNode1以便下次继续}else{//当pHead2->val小时同理ListNode *nextNode2=pHead2->next;pHead2->next=pHead1;pHead2=nextNode2;}}return newHead;}
};

输出结果: 运行时间: <1 ms 占用内存:8552K 状态:答案正确(其实是错的)

《剑指Offer》 合并两个排序的链表相关推荐

  1. 剑指Offer——合并两个排序的链表

    1.题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 2.代码实现 1 package com.baozi.offer; 2 3 /** 4 * ...

  2. 剑指 Offer合并两个排序的链表

    题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2-> ...

  3. java listnode 合并链表_剑指offer:合并两个排序的链表(Java)

    1.问题描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 2.思路 方法1:非递归方法 根据题目这个很类似排序中的外排过程,两个数组分别排好序,然后再 ...

  4. 剑指Offer25 合并两个排序的链表

    剑指Offer 25. 合并两个排序的链表 剑指Offer 25. 合并两个排序的链表 这题是一道简单题,如果学习了数据结构当中的链表的话,可以很轻松就想出解题过程: /*** Definition ...

  5. 剑指offer-17.合并两个排序的链表

    https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?tpId=13&tqId=11169&tPage= ...

  6. 剑指offer 合并2个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解决方案: 用递归的思想. /* public class ListNode {int val; ...

  7. python数据结构剑指offer-合并两个排序的链表

    合并两个排序的链表 描述 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的. 数据范围: 0 \le n \le 10000≤n≤1000,-1000 \le ...

  8. 剑指offer25-合并两个排序的链表

    问题描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2-> ...

  9. 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...

  10. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java

    <LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...

最新文章

  1. luogu P1064 金明的预算方案
  2. python画图颜色表示大小变化_Python matplotlib减少色条标签的大小
  3. python编程例子-几个Python小案例,爱上Python编程!
  4. PLC模糊控制之模糊化
  5. 【移动安全基础篇】——26、两个简单app破解
  6. 紫微星情大全系列之紫微星
  7. chrome插件之vimium,解放你的鼠标
  8. hdu 6438 - 贪心
  9. mac升级node版本(用n升级nodejs)
  10. Manjaro Linux 双显卡安装步骤及独立显卡运行游戏(Nvidia GeForce GTX 980m)
  11. 计算机word画铁路,在word中画铁路线.docx
  12. 开源四轴飞行器CC3D的稳定模式和PID算法简介
  13. 这个牛逼的在线项目任务管理工具,终于开源了!
  14. 【渝粤教育】电大中专跨境电子商务理论与实务 (22)作业 题库
  15. Bus消息总线如何实现
  16. DAX学习-同一表上的多层嵌套上下文EARLIER当前行与VAR变量
  17. ZHS16GBK编码中汉字缺失
  18. Delphi Tmail2000
  19. Beautiful Soup 中文文档
  20. 白杨SEO:360搜索排名核心技巧是什么?网站怎么做360的SEO优化排名?

热门文章

  1. C++:函数指针是个什么玩意儿?
  2. OpenCV辅助对象(help objects)(1)_TermCriteria
  3. 笨方法“学习python笔记之random
  4. mysql触发器如何获取当前表名_Mysql如何获取中位数
  5. python合并两个文本文件内容_利用python自带插件合并多个excle文件内容
  6. VSCode + git 代码托管【当前没有源代码管理提供程序注册】(没有‘+’加法号) - 解决篇
  7. RequireJS代码文件依赖管理 - 入门篇
  8. linux红帽6架设apache,linux Redhat6.5 中 编译安装apache
  9. 服务器打包运营级H5商城源码
  10. mysql5717开发设置怎么调回来_Window 下安装Mysql5.7.17 及设置编码为utf8的方法