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 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++;
}