题目链接🔗放在这里了力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
1. 题目分析
先读题,分清楚题中给的信息,我们做题一定要看末尾给的变量范围,学会自己整理:
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,试a可以为0,list2可以为空。
2. 源代码(内含解释)
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; }