次のコードは、2 つのリンクリストを構築し、それらの両方を渡して 3 つ目のマージされたリンクリストを構築します。ただし、マージされると、l1 と l2 (最初に構築された) リンクリストが変更されました。このコードのどこで l1 と l2 を null に設定する必要がありますか?
編集: null に設定する理由は、クライアントが変更された l1 または l2 を今後使用しないようにするためです。一度マージすると、新しい参照が作成され、以前の参照は無効になり、作成時にリンクリストであると誰かが信じて使用しないようにする明確な契約が必要です。
public class MergeLinkedList {
Node first;
Node last;
public void add (int val) {
final Node l = last;
final Node newNode = new Node(val, null);
last = newNode;
if (first == null) {
first = newNode;
} else {
l.next = newNode;
}
}
public void displayList() {
Node tempFirst = first;
while (tempFirst != null) {
System.out.print(tempFirst.item + " ");
tempFirst = tempFirst.next;
}
}
private static class Node {
int item;
Node next;
Node(int element, Node next) {
this.item = element;
this.next = next;
}
}
private Node mergeLinkedListRecursive(Node list1, Node list2) {
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
if (list1.item < list2.item) {
list1.next = mergeLinkedListRecursive(list1.next, list2);
return list1;
} else {
list2.next = mergeLinkedListRecursive(list1, list2.next);
return list2;
}
}
public void mergeLinkedListRecursion(MergeLinkedList list1, MergeLinkedList list2) {
first = mergeLinkedListRecursive(list1.first, list2.first);
}
public static void main(String[] args) {
int[] a1 = {1, 3, 5};
int[] a2 = {2, 4};
MergeLinkedList l1 = new MergeLinkedList();
for (int val : a1 ) {
l1.add(val);
}
MergeLinkedList l2 = new MergeLinkedList();
for (int val : a2) {
l2.add(val);
}
MergeLinkedList l3 = new MergeLinkedList();
l3.mergeLinkedListRecursion(l1, l2);
l3.displayList();
}
}