算法村-----合并链表(白银)

问题:

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

 

 

方式一:创建一个新的链表,把节点放进去

思路分析:

创建一个新的链表,遍历把要保留的位置放进去

代码实现:

public static Node deleteAndMergeLinked(Node list1, Node insertList, int a, int b) {
        //思路一:新建一个链表,循环找到位置a,b,删除a-b的节点,并把insertList插入位置a,b中
        if (list1 == null) return null;
        if (insertList == null) return list1;
        int length = ListNodeUtils.getLength(list1);
        if (!(a < length && a > 0) || !(b > a && b <= length)) {
            System.out.println("a或b的位置不合法");
            return list1;
        }
        Node pNode = new Node(-1);
        Node current = pNode;
        int count = 1;//表示当前位置序号
        while (count < a) {
            current.next = list1;
            list1 = list1.next;
            current = current.next;
            count++;
        }
        current.next = insertList;
        while (count <= b) {
            list1 = list1.next;
            count++;
        }
        while (current != null) {
            if (current.next == null) {
                current.next = list1;
                list1 = null;
            }
            current = current.next;
        }

        return pNode.next;

    }

方法二:用不同的变量保存每个要保留的部分,然后首尾相就行

思路分析:

保存每个需要留下来的链表,成3个链表,分别首尾相连,在组成一个链表

代码实现:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值