https://leetcode.cn/problems/merge-in-between-linked-lists/
分析:
要解决这个问题,我们可以按以下步骤来进行:
1.保存list1链表连接处节点;
2.逐个删除list1中a下标到b下标处的节点;
3.list2的头节点和尾节点和list2相连接。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode LN;
void Delete(LN** pf, LN* pos)//删除节点
{
assert(pf && *pf);
assert(pos);
LN* prev = *pf;
while (prev->next != pos)
{
prev = prev->next;
}
prev->next = pos->next;
free(pos);
pos = NULL;
}
LN* FindbyOrder(LN* phead, int Order)//更具下标找到对应的节点
{
assert(phead);
int count = 0;
LN* pcur = phead;
while (pcur)
{
count++;
if (count == Order)
return pcur;
pcur = pcur->next;
}
return NULL;
}
LN* get_tail(LN* phead)//获取尾节点
{
LN* pcur = phead;
while (pcur->next != NULL)
{
pcur = pcur->next;
}
return pcur;
}
struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2)
{
LN* front = FindbyOrder(list1, a);
LN* end = FindbyOrder(list1, b+2);
LN* pcur = FindbyOrder(list1, a+1);
while (pcur->next != end)
{
LN* next = pcur->next;
Delete(&list1, pcur);
pcur = next;
}
LN* list2tail = get_tail(list2);
front->next = list2;
list2tail->next = end;
return list1;
}
结果分析:
时间复杂度:
空间复杂度: