【数据结构与算法】合并两个有序链表
【摘要】 合并两个有序链表问题的一个简单高效的解题思路——创建一个新的链表,将两个链表的节点元素按大小顺序逐个尾插到新的链表中,最后返回新链表的首节点地址
目录
一、问题描述
合并两个有序链表问题的一个简单高效的解题思路——创建一个新的链表,将两个链表的节点元素按大小顺序逐个尾插到新的链表中,最后返回新链表的首节点地址
二、解题思路详解
合并两个有序链表的思路
创建一个新的链表,将两个链表的节点元素按大小顺序逐个尾插到新的链表中,最后返回新链表的首节点地址
解题的步骤
- 先对两个链表进行判空,如果任意一个链表为空,直接返回另一个链表首节点地址
- 创建两个指针用来指向新链表的首节点和尾节点,初始都指向NULL
- 再创建两个指针p1 p2用来遍历两个有序链表,初始分别指向两个链表的首节点
- 然后进入while循环,当两个链表都未遍历完成时执行循环,先比较p1 和p2指向的节点的元素大小,将较小的节点插入新链表的尾部
- 插入的过程——先判断新链表是否为空
如果为空,新链表的首尾指针都指向该节点
如果不为空,执行尾插。将新链表尾节点的next指针执行该节点,再将尾指针向后移动
完成一个节点插入后,将该节点所属的链表的遍历指针向后移动- 出循环后,说明两个链表其中有一个先遍历完成了
此时进行判断,哪个指针指向空,就将另一个链表剩余节点挂在新链表尾部- 最后,返回新链表的首节点指针
代码的优化
存在问题——每次插入都要判断链表是否为空
解决办法——创建不存储数据的头结点,让链表不为空
不要忘记使用完成后对动态申请空间释放
最后返回新链表第一个有效节点的地址
三、C语言代码实现
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)