新建一个节点,把element传进去
new ListNode(element);
它成为一个新的节点,这样子它就具备数据,但是next为空
(next现在是空指针,没有指向任何东西)
@Override
public void add(Object element) {
if(first==null) {
first=new ListNode(element);
last=first;
}else {
last.next=new ListNode(element);
//此时的last不再是上一次的last,last应该指向最后这个新增的这个
last=last.next;
//一种更替,修改last指针位置,指向原来的下一个节点(自己是倒数第二了,指针要后移一个,让last明正言顺)
}
}
接下来重写一下toString方法:
【有缺陷写法】
while(p.data!=null) {
sb.append(p.data).append(",");
p=p.next;
}
这个while是有问题的,否则最后一个元素打不出来
当前情况下p已经是最后一个元素了,等于p.next ,它自己就为空了
所以while就退出了
【正确写法】
@Override
public String toString() {
StringBuilder sb=new StringBuilder("[");
ListNode p=first;
while(p!=null) {//一个经典的写法
sb.append(p.data).append(",");//把p和first先复制一份,看看它有没有next,如果没有next,就不往下移动了
p=p.next;//有的话:p=p.next 逐步往后移 p已经是最后一个元素了
}
sb.append("]");
return sb.toString();
}
【此时熟悉一下新建的测试方法】
@Test
public void testAdd() {
//添加balabala
}
@Test
public void testAdd() {
SingleLinkedList list=new SingleLinkedList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
System.out