public class OneLinkedListTest {
private Node fristnode; //头结点
private int size=0; //记录大小
public static class Node{ //结点类
private Object data; //该结点数据
private Node next; //该结点指向下一个结点的指针
public Node(Object data){
this.data=data;
this.next=null;
}
@Override
public String toString() {
return data+"->";
}
}
public OneLinkedListTest(){ //初始化单链表
this.fristnode=null;
this.size=0;
}
public void print(){ //遍历单链表
Node p= this.fristnode;
while(p!=null){
System.out.print(p);
p=p.next;
}
System.out.println();
}
public void add(Node node,int index){ //单链表的添加元素
if(index<0||index>size){
System.out.println("超出范围,无法添加。。。。");
return;
}else if(index==0){
if(fristnode==null){ //index为0,头结点为空,直接把值赋给头结点
fristnode=node;
size++;
return;
}else{
node.next = fristnode; //头结点不为空,在头结点前面插入一个元素,并为新的头结点
fristnode=node;
size++;
return;
}
}else{
Node p= fristnode;
for(int i=0;i<index-1;i++){
p=p.next;
}
node.next=p.next;
p.next=node;
size++;
return;
}
}
public void remove(Object data) {
if (fristnode == null) {
System.out.println("链表为空。。。。");
return;
}else{
while (data.equals(fristnode.data)) { //删除元素为头结点,这里不用if
// 防止删除的头结点和头结点下一个结点相同 (5 5 1的情况)
fristnode = fristnode.next;
size--;
}
Node p = fristnode;
while(p!=null && p.next!=null){ //确保头结点后面有元素
if(p.next.data.equals(data)){ //删除元素不为头结点
p.next=p.next.next;
size--;
}else{
p=p.next;
}
}
}
}
public static void main(String[] args) {
OneLinkedListTest oneLinkedListTest = new OneLinkedListTest();
oneLinkedListTest.add(new Node(1),0);
oneLinkedListTest.add(new Node(5),1);
oneLinkedListTest.add(new Node(5),0);
oneLinkedListTest.add(new Node("KIKI"),2);
oneLinkedListTest.print();
oneLinkedListTest.remove(5);
oneLinkedListTest.print();
}
}