Welcome to Subscribe On Youtube

1669. Merge In Between Linked Lists

Description

You are given two linked lists: list1 and list2 of sizes n and m respectively.

Remove list1's nodes from the ath node to the bth node, and put list2 in their place.

The blue edges and nodes in the following figure indicate the result:

Build the result list and return its head.

 

Example 1:

Input: list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]
Output: [0,1,2,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.

 

Constraints:

  • 3 <= list1.length <= 104
  • 1 <= a <= b < list1.length - 1
  • 1 <= list2.length <= 104

Solutions

  • /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
            ListNode p = list1, q = list1;
            while (--a > 0) {
                p = p.next;
            }
            while (b-- > 0) {
                q = q.next;
            }
            p.next = list2;
            while (p.next != null) {
                p = p.next;
            }
            p.next = q.next;
            q.next = null;
            return list1;
        }
    }
    
  • /**
     * 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) {
            auto p = list1, q = list1;
            while (--a) {
                p = p->next;
            }
            while (b--) {
                q = q->next;
            }
            p->next = list2;
            while (p->next) {
                p = p->next;
            }
            p->next = q->next;
            q->next = nullptr;
            return list1;
        }
    };
    
  • # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def mergeInBetween(
            self, list1: ListNode, a: int, b: int, list2: ListNode
        ) -> ListNode:
            p = q = list1
            for _ in range(a - 1):
                p = p.next
            for _ in range(b):
                q = q.next
            p.next = list2
            while p.next:
                p = p.next
            p.next = q.next
            q.next = None
            return list1
    
    
  • /**
     * Definition for singly-linked list.
     * type ListNode struct {
     *     Val int
     *     Next *ListNode
     * }
     */
    func mergeInBetween(list1 *ListNode, a int, b int, list2 *ListNode) *ListNode {
    	p, q := list1, list1
    	for ; a > 1; a-- {
    		p = p.Next
    	}
    	for ; b > 0; b-- {
    		q = q.Next
    	}
    	p.Next = list2
    	for p.Next != nil {
    		p = p.Next
    	}
    	p.Next = q.Next
    	q.Next = nil
    	return list1
    }
    
  • /**
     * Definition for singly-linked list.
     * class ListNode {
     *     val: number
     *     next: ListNode | null
     *     constructor(val?: number, next?: ListNode | null) {
     *         this.val = (val===undefined ? 0 : val)
     *         this.next = (next===undefined ? null : next)
     *     }
     * }
     */
    
    function mergeInBetween(
        list1: ListNode | null,
        a: number,
        b: number,
        list2: ListNode | null,
    ): ListNode | null {
        let p = list1;
        let q = list1;
        while (--a > 0) {
            p = p.next;
        }
        while (b-- > 0) {
            q = q.next;
        }
        p.next = list2;
        while (p.next) {
            p = p.next;
        }
        p.next = q.next;
        q.next = null;
        return list1;
    }
    
    
  • /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     public int val;
     *     public ListNode next;
     *     public ListNode(int val=0, ListNode next=null) {
     *         this.val = val;
     *         this.next = next;
     *     }
     * }
     */
    public class Solution {
        public ListNode MergeInBetween(ListNode list1, int a, int b, ListNode list2) {
            ListNode p = list1, q = list1;
            while (--a > 0) {
                p = p.next;
            }
            while (b-- > 0) {
                q = q.next;
            }
            p.next = list2;
            while (p.next != null) {
                p = p.next;
            }
            p.next = q.next;
            q.next = null;
            return list1;
        }
    }
    
    

All Problems

All Solutions