问题:
两个链表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个链表,分别首尾相连,在组成一个链表
代码实现: