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

C语言笔记29 •单链表经典算法OJ题-1.合并两个升序链表•

1.合并两个升序链表(创建头节点 简化代码)

ListNode* lowlisthead=(ListNode*)malloc(sizeof(ListNode));

新颖之处就是创建头节点(哨兵位)能够减少代码,不用每次都判断链表是否为NULL,

注意的是:最后函数的返回值是头节点的下一个地址(lowlisthead->next)

//========1.合并两个升序链表(创建头节点 简化代码)==========
typedef int SLTDataType;typedef struct SListnode
{SLTDataType val;struct SListnode* next;
}ListNode;ListNode* createNode(SLTDataType val)
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));if (newnode == NULL){perror("malloc");exit(1);}newnode->val = val;newnode->next = NULL;return newnode;
}ListNode* mergeTwoLists(ListNode* L1, ListNode* L2)
{ListNode* lowlisthead=(ListNode*)malloc(sizeof(ListNode));ListNode* pcur = lowlisthead;while (L1 && L2){if (L1->val < L2->val){pcur->next = L1;pcur = pcur->next;L1 = L1->next;}else{pcur->next = L2;pcur = pcur->next;L2 = L2->next;}//pcur = pcur->next; 不能将判断语句里面的节点指针的移动 放在这里 ,确保在每次链接节点后正确地移动当前指针 pcur}if (L1){pcur->next = L1;}if (L2){pcur->next = L2;}return lowlisthead->next;}int main()
{ListNode* list1, * list2;//创建两个链表list1 = createNode(1);list1->next = createNode(2);list1->next->next = createNode(4);list2 = createNode(1);list2->next = createNode(3);list2->next->next = createNode(5);ListNode* head = mergeTwoLists(list1, list2);while (head){printf("%d ", head->val);head = head->next;}return 0;
}

2.合并两个升序链表(不创建头节点) 

//2.合并两个升序链表(不创建头节点)typedef int SLTDataType; typedef struct SListnode
{SLTDataType val;struct SListnode* next;
}ListNode;ListNode* createNode(SLTDataType val)
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));if (newnode == NULL){perror("malloc");exit(1);}newnode->val = val;newnode->next = NULL;return newnode;
}//ListNode* mergeTwoLists(ListNode* L1, ListNode* L2)
//{
//	ListNode* lowlisthead, * highlisthead;
//	lowlisthead = highlisthead = NULL;
//	
//	ListNode* pcur1, *pcur2;
//	pcur1 =lowlisthead;
//	pcur2 = highlisthead;
//	while(L1 && L2)
//	{
//		if (L1->val < L2->val)
//		{
//			if (lowlisthead == NULL)
//			{
//				lowlisthead = L1;
//			}
//			else
//			{
//				pcur1->next = L1;
//				pcur1 = pcur1->next;
//			}
//			L1 = L1->next;
//		}
//		else
//		{
//			if (highlisthead == NULL)
//			{
//				highlisthead = L2;
//			}
//			else
//			{
//				pcur2->next = L2;
//				pcur2 = pcur2->next;
//			}
//			L2 = L2->next;
//		}
//	}
//	if (L1)
//	{
//		pcur1->next = L1;
//	}
//	if (L2)
//	{
//		pcur2->next = L2;
//	}
//
//}ListNode* mergeTwoLists(ListNode* L1, ListNode* L2)
{ListNode* lowlisthead, * pcur;pcur = lowlisthead= NULL;while (L1 && L2){if (L1->val < L2->val){if (lowlisthead == NULL){lowlisthead = pcur = L1;}else{pcur->next = L1;pcur = pcur->next;}L1 = L1->next;}else{if (lowlisthead == NULL){lowlisthead = pcur = L2;}else{pcur->next = L2;pcur = pcur->next;}L2 = L2->next;}//pcur = pcur->next; 不能将判断语句里面的节点指针的移动 放在这里 ,确保在每次链接节点后正确地移动当前指针 pcur}if (L1){pcur->next = L1;}if (L2){pcur->next = L2;}return lowlisthead;}int main()
{ListNode* list1,*list2;//创建两个链表list1 = createNode(1);list1->next= createNode(2);list1->next->next = createNode(4);list2 = createNode(1);list2->next = createNode(3);list2->next->next = createNode(5);ListNode* head = mergeTwoLists(list1, list2);while(head){printf("%d ", head->val);head = head->next;}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在 PostgreSQL 里如何处理数据的归档和清理策略的优化?
  • Sentieon应用教程:本地使用-Quick_start
  • 笔记第二弹
  • 【BUG】已解决:JsonMappingException
  • 从零开始学习嵌入式---- C高级编译工具
  • FastAPI 学习之路(三十四)数据库多表操作
  • 基于术语词典干预的机器翻译挑战赛笔记Task1 跑通baseline
  • mybatis基础语法
  • springmvc-03
  • 《梦醒蝶飞:释放Excel函数与公式的力量》11.3 ISTEXT函数
  • Spark SQL 概述
  • 基于Python+Flask+MySQL的新冠疫情可视化系统
  • PostgreSQL 中如何处理数据的批量更新和事务日志管理?
  • OpenCV:python图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数
  • 分布式I/O从站的认知
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【Leetcode】104. 二叉树的最大深度
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • eclipse(luna)创建web工程
  • Mysql数据库的条件查询语句
  • nodejs实现webservice问题总结
  • Promise面试题2实现异步串行执行
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 实习面试笔记
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 小试R空间处理新库sf
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 我们雇佣了一只大猴子...
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #图像处理
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (07)Hive——窗口函数详解
  • (1)虚拟机的安装与使用,linux系统安装
  • (152)时序收敛--->(02)时序收敛二
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (javascript)再说document.body.scrollTop的使用问题
  • (LeetCode 49)Anagrams
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (回溯) LeetCode 46. 全排列
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .equals()到底是什么意思?
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .Net 高效开发之不可错过的实用工具
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET导入Excel数据
  • .net专家(张羿专栏)
  • /run/containerd/containerd.sock connect: connection refused
  • @JsonSerialize注解的使用
  • @vue/cli 3.x+引入jQuery
  • [14]内置对象