21 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
思路:
- 两个链表都存在时,遍历两个链表,并对比节点val,把较小的一个节点插到temp之后。
- 有一个链表不存在时跳出循环,然后把另一个链表的剩余部分全部插入到当前temp之后。
注意:开头创建了一个假的链表头,让temp指针指向他,就不需要再对首个链表节点做特殊处理,牺牲了空间,换取了代码简洁性。
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
struct ListNode list_head = {
0}, *list_temp = &list_head;
while(list1 && list2)
{
if(list1->val > list2->val)
{
list_temp->next = list2;
list2 = list2->next;
}
else
{
list_temp->next = list1;
list1 = list1->next;
}
list_temp = list_temp->next;
}
if(list1)
{
list_temp->next = list1;
}
else
{
list_temp->next = list2;
}
return
链表操作:合并、回文与环形检测

本文介绍了三种链表操作的算法:合并两个有序链表,检查回文链表以及判断环形链表。对于合并,采用双指针法,根据节点值比较合并。回文链表的检测利用递归,从头尾两端向中间验证。环形链表的检测使用快慢指针,一旦快指针追上慢指针则表明存在环。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



