LeetCode 1669. 合并两个链表

题意:

给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。

请你将 list1 中第 a 个节点到第 b 个节点删除,并将list2 接在被删除节点的位置。

数据范围:
3 <= list1.length <= 104
1 <= a <= b < list1.length - 1
1 <= list2.length <= 104

解法:

模拟即可.
找到第(a-1)和第(b)个结点的位置就行了.

但是leetcode的c++代码使用free好像会报错.

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 *pre_pa=list1;
        for(int i=1;i<=a-1;i++)pre_pa=pre_pa->next;//找到(a-1)
        ListNode *nt_pb=list1;
        for(int i=1;i<=b+1;i++)nt_pb=nt_pb->next;//找到(b+1)
        ListNode *p=pre_pa->next;
        while(p!=nt_pb){
    
    
            ListNode* temp=p->next;
            //free(p);
            p=temp;
        }
        pre_pa->next=list2;
        ListNode *tail2=list2;
        while(tail2->next)tail2=tail2->next;
        tail2->next=nt_pb;
        return list1;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/112813139