楼主: 
argorok (s.green)   
2024-03-20 11:18:42※ 引述《sustainer123 (caster )》之铭言:
: https://leetcode.com/problems/merge-in-between-linked-lists
: 1669. Merge In Between Linked Lists
: 给你两个链表(list1 and list2)与两个数字(a and b)
: 你需要移除list1中a到b的节点并替换为list2
: Example 1:
: Input: list1 = [10,1,13,6,9,5], a = 3, b = 4, list2 =
: [1000000,1000001,1000002]
: Output: [10,1,13,1000000,1000001,1000002,5]
: Explanation: We remove the nodes 3 and 4 and put the entire list2 in their
: place. The blue edges and nodes in the above figure indicate the result.
: Example 2:
: Input: list1 = [0,1,2,3,4,5,6], a = 2, b = 5, list2 =
: [1000000,1000001,1000002,1000003,1000004]
: Output: [0,1,1000000,1000001,1000002,1000003,1000004,6]
: Explanation: The blue edges and nodes in the above figure indicate the
: result.
: 思路:
: 遍历list1 找到a-1和b+1节点 a-1节点指向list2的开头
: 遍历list2 找到list2的结尾 结尾指向b+1节点
: 回传list1
找不到工作 来练一下C++ code 呜呜哇哇哇
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
        ListNode *it = list1, *tmp = list1;
        // find a-1th node
        for(int i = 0; i < a-1; ++i){
            tmp = tmp->next;
        }
        it = tmp->next;
        tmp->next = list2;
        // find b-1th node and free nodes
        for(int i = 0; i < b-a; ++i){
            tmp = it;
            it = it->next;
            delete tmp;
        }
        tmp = it->next;
        delete it;
        // traverse list2
        it = list2;
        while(it->next != nullptr){
            it = it->next;
        }
        it->next = tmp;
        return list1;
    }
};