题目链接放在这里了力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
先读题,分清楚题中给的信息,我们做题一定要看末尾给的变量范围,学会自己整理:
1. 两个链表分别为list1和list2,list1长度是(≥3)list2长度是(≥1);就说明都不为空,可以不用专门判断为空的时候。
2. a和b是下标的位置,下标是从0开始的。(1≤a≤b≤list1.length-1)
3. 要删除的位置合起来是个链表,所以是要删除以a位置为头节点,b位置为尾结点的子链表。
4. 删除之后将list1被删除的位置和list2链接起来。
5. 这里挺好的,没有什么临界的,如果想做临界的,可以试试a可以为0,list2可以为空。
struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2)
{
struct ListNode* cura = list1;//遍历到a位置前一个节点处
struct ListNode* curb = list1;//遍历到b位置后一个节点处
struct ListNode* cur = list2;//遍历到list2尾结点
int A = a;
int B = b;
//用cura_0来记录要删除的子链表的头节点的前驱节点
while(--A)
{
cura = cura->next;
}
//找到list2的尾结点
while(cur->next)
{
cur = cur->next;
}
//在这里b++的原因是要找到要删除的子链表的尾结点的后继节点
B++;
while(B--)
{
curb = curb->next;
}
cura->next = list2;
cur->next = curb;
return list1;
}