【发布时间】:2015-10-03 20:31:40
【问题描述】:
我意识到已经存在一些很好的线程来讨论如何在 Java 中实现链表,但是我似乎找不到一个不使用这样的构造函数的线程,
public LinkList() {
Link = null;
}
或类似的东西。但是,我没有在我的代码中这样做,因此我在编写一些方法时遇到了麻烦。
我有一个名为 Link 的类,其中包含以下代码,注意没有像上面显示的那样的任何构造函数:
public class Link {
private Link next = null;
private String value = null;
public Link getNext(){
return next;
}
public void setNext(Link nextLink){
next = nextLink;
}
public String getValue(){
return value;
}
public void setValue(String aValue){
value = aValue;
}
}
然后我有我的LinkedList 类,其中包含以下代码:
public class LinkedList {
private Link head = null;
private Link tail = null;
public Link getHead(){
return head;
}
public void setHead(Link aLink){
head = aLink;
}
public Link getTail(){
return tail;
}
public void setTail(Link aLink){
tail = aLink;
}
public boolean isEmpty(){
return(head == null && tail == null);
}
public void addLast(String aString){
Link link = new Link();
link.setValue(aString);
//tail.setNext(link);
if(isEmpty()){
head = link;
}else{
tail.setNext(link);
}
tail = link;
}
public void addFirst(String aString) {
Link link = new Link();
link.setValue(aString);
if(isEmpty()){
tail = link;
}else{
head.setNext(link);
}
head = link;
}
public Link removeFirst(){
Link temp = head;
head = temp.getNext();
temp.setNext(null);
return temp;
}
}
我的addFirst 方法和我的isEmpty 方法似乎都有效,但我的addLast 和removeFirst 方法却不行。我画了图片,查看了伪代码,并在互联网上搜索,但我似乎无法弄清楚这一点。
我需要知道如何让我的 addLast 和 removeFirst 方法正常工作,而不必像我一直看到的所有其他示例代码一样在开头添加构造函数。
这是他们需要通过的测试:
@Test
public void testRemoveFirst(){
list.addFirst("three");
list.addFirst("two");
list.addFirst("one");
assertTrue("one".equals(list.removeFirst()));
assertTrue("two".equals(list.removeFirst()));
assertTrue("three".equals(list.removeFirst()));
}
@Test
public void testAddLast(){
list.addFirst("three");
list.addFirst("two");
list.addFirst("one");
assertTrue( "three".equals(list.removeLast()));
assertTrue( "two".equals(list.removeLast()));
assertTrue( "one".equals(list.removeLast()));
assertNull(list.removeLast());
}
【问题讨论】:
-
为什么不想要构造函数?
-
你能提供一个那些方法不起作用的测试用例吗?
-
(为什么你认为构造函数和你的问题有关系?)
-
你在两个类中都有一个构造函数,你自己在这里使用
Link link = new Link();编译器会为你生成它。 -
"...我的教授希望我们知道如何在不使用链接列表的情况下创建链接列表。" - 啊哈。你正在学习那些应该被命名为“愚蠢的 Java 技巧”的课程。
标签: java linked-list singly-linked-list