リンクリストの私の実装では、2つの方法があります。一方のメソッドを呼び出すと、もう一方のメソッドの結果に影響します。1つの方法はconcatenateLL()
、2つのリストを連結することであり、1つの方法はgetNumberOfNodes()
、リンクリスト内のノードの数を返すことです。私のメソッド連結では、2つのリストを連結した新しいリストを返すことになっています。しかし、私のコードでは、結果の新しいリストは最初のパラメーターのリストに影響を与えます。l
リストとパラメータを渡しm
、新しいリストを返すとします。
問題は、新しいものが単なるリストl
であり、リストの要素が含まれていることですm
(連結のため)。getNumberOfNodes()
このため、リストl
とを呼び出すとm
、間違った値が返されます。
これが私のコードです:
public static LinkedList concatenateLL(LinkedList l, LinkedList m) {
LinkedList a = l;
Node l_last = a.getTailNode();
Node m_first = m.getHeadNode();
l_last.setNext(m_first);
a.tail = m.getTailNode();
return a;
}
public int getNumberOfNodes(Node h) {
if(h == null)
return 0;
return 1 + getNumberOfNodes(h.getNext());
}
public static void print(LinkedList l) {
Node v = l.getHeadNode();
while(v != null) {
System.out.print(v.getElement()+" ");
v = v.getNext();
}
System.out.println();
}
public static void main(String[] args) throws IndexOutOfBoundsException {
// TODO Auto-generated method stub
LinkedList l = new LinkedList();
LinkedList m = new LinkedList();
l.insertFirst(5);
l.insertFirst(7);
l.insertFirst(3);
l.insertFirst(6);
print(l);
m.insertFirst(2);
m.insertFirst(4);
m.insertFirst(9);
m.insertFirst(8);
m.insertLast(10);
m.insertLast(12);
print(m);
LinkedList n = concatenateLL(l, m);
print(n);
System.out.println(l.getNumberOfNodes(l.getHeadNode()));
System.out.println(m.getNumberOfNodes(m.getHeadNode()));
}
mainメソッドでは、listの長さがl
返さ4
れ、listm
が返される必要があり6
ます。しかし、を呼び出す前に連結メソッドを呼び出した後、asの長さ(との連結の結果としてのリストのノードの数)とasの長さ(理由はわかりません)getNumberOfNodes()
を取得します。l
10
n
l
m
m
15