1.合并两个有序链表
链接:
https://leetcode.cn/problems/merge-two-sorted-lists/description/
题目描述:
思路1:
遍历其中一个链表,分别进行头插,尾插和中间插入到另一个链表中
代码1:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
if (list1 == NULL && list2 == NULL)
{
return NULL;
}
if (list1 == NULL)
{
return list2;
}
if (list2 == NULL)
{
return list1;
}
struct ListNode* cur1 = list1; // 遍历list1链表
struct ListNode* next1 = cur1->next; // cur1的下一个节点
struct ListNode* cur2 = list2; // 遍历list2链表
struct ListNode* next2 = cur2->next; // cur2的下一个节点
while (cur2)
{
// 头插
if (cur2->val <= list1->val)
{
cur2->next = list1;
cur1 = list1 = cur2;
next1 = cur1->next;
cur2 = next2;
if (next2)
next2 = next2->next;
}
// 尾插
else if (cur2->val > cur1->val && next1 == NULL)
{
cur1->next = cur2;
return list1;
}
// 中间插入
else if (cur2->val >= cur1->val && cur2->val <= next1->val)
{
cur1->next = cur2;
cur2->next = next1;
cur1 = cur1->next;
cur2 = next2;
if (next2)
next2 = next2