Java 如何将已排序的链表插入到另一个已排序链表中,同时保持其已排序?

Java 如何将已排序的链表插入到另一个已排序链表中,同时保持其已排序?,java,arrays,algorithm,sorting,linked-list,Java,Arrays,Algorithm,Sorting,Linked List,如何将一个已排序的链表(L2)作为一个整体插入另一个已排序的链表(L1)中,并维护这两个已排序的链表 方法头应该是:void insertList(LinkedList L2) 例如: L1 = 1 → 2 → 3 → 10 L2 = 4 → 5 → 6 调用该方法后,L1列表应为: 1 → 2 → 3 → 4 → 5 → 6 → 10 如何做到这一点?您正在寻找的是的合并阶段 在LinkedList中,只需将这两个元素迭代在一起,并每次将最小的元素推送到结果列表即可 伪代码: iter1

如何将一个已排序的链表(L2)作为一个整体插入另一个已排序的链表(L1)中,并维护这两个已排序的链表

方法头应该是:
void insertList(LinkedList L2)

例如:

L1 = 1 → 2 → 3 → 10
L2 = 4 → 5 → 6
调用该方法后,L1列表应为:

1 → 2 → 3 → 4 → 5 → 6 → 10

如何做到这一点?

您正在寻找的是的合并阶段

在LinkedList中,只需将这两个元素迭代在一起,并每次将最小的元素推送到结果列表即可

伪代码:

iter1 = list1.iterator()
iter2 = list2.iterator()
//before these commands make sure the lists are not empty:
curr1 = iter1.next(); 
curr2 = iter2.next();
List result = new LinkedList();
while curr1 != null && curr2 != null {
   if curr1 < curr2 { 
          result.add(curr1);
          curr1 = list1.next();
   } else { 
          result.add(curr2);
          curr2 = list2.next();
   }
}
while (curr1 != null) {
   result.add(curr1);
   curr1 = curr1.next();
}
while (curr2 != null) {
   result.add(curr2);
   curr2 = curr1.next();
}
iter1=list1.iterator()
iter2=list2.iterator()
//在执行这些命令之前,请确保列表不为空:
curr1=iter1.next();
curr2=iter2.next();
列表结果=新建LinkedList();
而curr1!=空值(&&curr2!=空的{
如果curr1
小提示:对于链表,如果需要,可以使用界面和
add()
方法对其进行优化,以就地运行并修改其中一个列表,而不是创建新列表。算法非常相似,只是在插入有关调用extra
next()
的元素时需要格外小心


我把修改算法的任务交给您,以便在适当的位置修改
list
,因为一旦理解了上述算法,就应该非常清楚如何执行。

list1.addAll(index,list2)
如果您使用的是
java.util.LinkedList
类。@khelwood没有。您是否阅读了问题和提供的示例?从示例中可以很清楚地看出,OP希望得到两个已排序的列表,并因此得到一个已排序的列表。@amit从OP使用的“将一个链接列表插入另一个链接列表”一词中,我假设他/她试图将一个链接列表插入另一个链接列表。当然,那是在你把“排序”这个词编辑成问题,改变它的意思之前。逐一地。这里是stackoverflow.com,不是domyhomerk.org!请阅读本网站指南,像这样的问题很可能会引起反对票和恶果@khelwood有一个非常清楚的示例+排序标记,我发现他想做的事情非常清楚..该算法也适用于ArrayList。@StephenC适用于ArrayList,但您不能在O(n)中执行它(如我在答案末尾所述)。