Какой алгоритм лучше объединить два отсортированных связанных списка по возрастанию в один отсортированный список по возрастанию?
Время против пространственной сложности?
Это решение уменьшает Пространственная сложность программы, поскольку новый связанный список не создается и не назначается излишне.
предполагается, что head1 и head2 - узлы заголовков списков
if(head1==null && head2==null) return null;
if(head1==null && head2!=null) return head2;
if(head1!=null && head2==null) return head1;
//assigning mergeLists head to min of both head
SinglyLinkedListNode t1, t2, c;
if(head1.data<head2.data){
t1 = head1;
t2 = head2;
c = head1;
}else{
t1 = head2;
t2 = head1;
c = head2;
}
//sorting both lists within without creating new list
while(t1.next!=null){
if(t1.next.data <= t2.data) t1 = t1.next;
else{
SinglyLinkedListNode temp = t1.next;
t1.next = t2;
t1 = t1.next;
t2 = temp;
}
}
t1.next = t2;
return c;
Этот classi c рекурсивный подход лучше с точки зрения сложности времени.
принимает a как head1 и b как head2
MergeSorted(Node a, Node b)
if (a == null && b == null)
return null;
if a==null
return b;
if b==null
return a;
Node c //Combined List // new list
if((a).data<(b).data)
c=a;
(c).next=MergeSorted((a).next,b);
else
c=b;
(c).next=MergeSorted(a,(b).next);
return c;