在我的链表实现中,有两种方法。当我调用一种方法时,它会影响另一种方法的结果。一种方法是concatenateLL()
连接两个列表,一种方法是getNumberOfNodes()
返回链表中的节点数。对于我的方法连接,我应该返回一个新列表,它是两个列表的连接。但在我的代码中,生成的新列表会影响第一个参数中的列表。假设我传递列表l
和m
参数,然后返回一个新列表。
问题是新的只是列表l
,现在包含列表的元素m
(由于连接)。正因为如此,当我调用getNumberOfNodes()
list l
and时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
。但是在调用之前调用连接方法之后getNumberOfNodes()
,我得到l
as的长度(这是由于 and的连接而导致的 list 的节点数)和 as 的长度10
(我不知道为什么)。n
l
m
m
15