java实现单链表出现异常,求大神解
java实现单链表出现错误,求大神解
public class SingleLinkList2<T> {
public class Node<T>{
T data;
Node<T> next ;
public Node(T data ,Node<T> next)
{
this.data = data ;
this.next = next ;
}
public Node(T data){
this(data, null);
}
}
Node<T> head ;
int length ;
public SingleLinkList2(){
head = null ;
int length = 0 ;
}
public void add(T data){
if(head==null)
head = new Node<T>(data);
Node<T> p =head;
while(p.next!=null)
p = p.next;
p.next = new Node<T>(data);
}
public String toString(){
StringBuilder sb = new StringBuilder();
Node p = head ;
while(p!= null)
{
sb.append(p.data);
p = p.next;
}
return sb.toString();
}
}
具体实现如下
public class Demo {
public static void main(String main[])
{
SingleLinkList2<String> sll = new SingleLinkList2<String>();
sll.add("1");
sll.add("2");
sll.add("3");
sll.add("4");
sll.add("5");
sll.add("6");
sll.add("7");
System.out.println(sll);
}
}
结果为11234567;
求解为什么会多个1,查了半天没发现错误。
------解决思路----------------------
因为head==null的时候放了两次。
public class SingleLinkList2<T> {
public class Node<T>{
T data;
Node<T> next ;
public Node(T data ,Node<T> next)
{
this.data = data ;
this.next = next ;
}
public Node(T data){
this(data, null);
}
}
Node<T> head ;
int length ;
public SingleLinkList2(){
head = null ;
int length = 0 ;
}
public void add(T data){
if(head==null)
head = new Node<T>(data);
Node<T> p =head;
while(p.next!=null)
p = p.next;
p.next = new Node<T>(data);
}
public String toString(){
StringBuilder sb = new StringBuilder();
Node p = head ;
while(p!= null)
{
sb.append(p.data);
p = p.next;
}
return sb.toString();
}
}
具体实现如下
public class Demo {
public static void main(String main[])
{
SingleLinkList2<String> sll = new SingleLinkList2<String>();
sll.add("1");
sll.add("2");
sll.add("3");
sll.add("4");
sll.add("5");
sll.add("6");
sll.add("7");
System.out.println(sll);
}
}
结果为11234567;
求解为什么会多个1,查了半天没发现错误。
------解决思路----------------------
因为head==null的时候放了两次。
public void add(T data) {
Node<T> node = new Node<T>(data);
if (head == null) {
head = node;
} else {
Node<T> p = head;
while (p.next != null)
p = p.next;
p.next = node;
}
length++;
}