1669. 合并两个链表

算法记录

LeetCode 题目:

  给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。



说明

一、题目

  输入:list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]
  输出:[0,1,2,1000000,1000001,1000002,5]

二、分析

  • 利用对象的指向改变来连接即可,需要注意的是删除范围的判断,删除区间,也就是连接的元素指向后一个。
/**
 * 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 temp = list1;
        ListNode temp2 = list2;
        ListNode t1 = null;
        ListNode t2 = null;
        int count = 0;
        while(temp != null) {
    
    
            count++;
            if(count == a) t1 = temp;
            if(count == b + 1) {
    
    
                t2 = temp;
                break;
            }
            temp = temp.next;
        }
        while(temp2.next != null) temp2 = temp2.next;
        t1.next = list2;
        temp2.next = t2.next;
        return list1;
    }
}

总结

熟悉链表的对象指向问题。

Guess you like

Origin blog.csdn.net/MTYSYS19990212/article/details/120394620