每日OJ——21. 合并两个有序链表(链表)
- 1.题目:21. 合并两个有序链表 (链表)
- 2.方法讲解:
- 2.1.解法一:递归
- 2.1.1.图文解析
- 2.1.2.代码实现
- 2.1.3.提交通过展示
- 2.2.解法二:迭代(无哨兵位)
- 2.2.1.图文解析
- 2.2.2.代码实现
- 2.2.3.提交通过展示
- 2.3.解法三:迭代(哨兵位)
- 2.3.1.图文解析
- 2.3.2.代码实现
- 2.3.3.提交通过展示
1.题目:21. 合并两个有序链表 (链表)
2.方法讲解:
2.1.解法一:递归
2.1.1.图文解析
首先对题目进行分析,如果两个链表其中有一个为空,则返回另一个链表。 定义一个结构体变量mergelist作为合并链表。这里关键的一点在于递归的思想,我们可以从两个链表的第一个值进行比较,如果第一个链表的第一个值小于第二个链表的第一个值,则更新mergelist的值为第一个链表,并将mergelist->next用递归的形式更新,即将第一个链表的下一个值来跟第二个链表比较;同理,如果大于,则将条件更换即可,通过不断更新并排序链表内的值,我们最终可以得到一个升序链表
2.1.2.代码实现
2.1.3.提交通过展示
2.2.解法二:迭代(无哨兵位)
2.2.1.图文解析
该解法是迭代的无哨兵位的算法,首先考虑list1和list2各自为空的情况,然后就是都不为空的情况,由于该算法是没有哨兵位的算法,所以要考虑为节点tail为空的情况,和不为空的情况,最后考虑一下,如果又一长一短的情况,然后返回头节点head即可。
2.2.2.代码实现
2.2.3.提交通过展示
2.3.解法三:迭代(哨兵位)
2.3.1.图文解析
该解法是迭代的有哨兵位的算法,首先考虑list1和list2各自为空的情况,然后就是都不为空的情况,由于该算法是有哨兵位的算法,所以不用考虑尾节点tail为空的情况,所以都是不为空的,只要最后考虑一下,如果又一长一短的情况,由于是哨兵位,需要返回头节点的下一个节点head->next即可。