博主头像
7024w的自留地

觉宇宙之无穷,识盈虚之有数

单链表代码

public class SList {

public static void main(String[] args) {
    Integer[] test = new Integer[]{1,2,3,4,5};
    SinglyList<Integer> t1 = new SinglyList<Integer>(test);
    System.out.println(t1.toString());
    System.out.println(t1.get(6)); //链表从0开始
    t1.set(3,8);
    System.out.println(t1.toString());
    System.out.println(t1.size());
    t1.insert(3,4);
    System.out.println(t1.toString());
    t1.remove(1); //删除第二个元素(2)
    System.out.println(t1.toString());


}

}

class SinglyList{

public Node<T> head;
public SinglyList(){
    this.head = new Node<>(); //创建头节点,data&next=null
}
public SinglyList(T[] values){
    this();
    Node<T> rear = this.head;
    for (int i = 0; i < values.length; i++) {
        if(values[i]!=null){
            rear.next = new Node<>(values[i], null);
            rear = rear.next;
        }
    }
}

public String toString(){
    String str = this.getClass().getName() + "(";
    for (Node<T> p = this.head.next ; p!=null ; p=p.next){
        str +=p.data.toString()+(p.next!=null?",":"");
    }
    return str + ")";
}

public boolean isEmpty(){
    return this.head.next==null;
}

public T get(int i){
    Node<T> p = this.head.next;
    for(int j = 0; p!=null&&j<i; p=p.next,j++);
    return (p!=null && i>=0)?p.data:null;
}
//0<=i<链表长度
public void set(int i, T x){
    if(x==null){
        return;
    }
    Node<T> p = this.head.next;
    int j = 0;
    for(; p!=null&&j<i; p=p.next,j++);
    //j<i 因为此处p=p.next执行后会i++保证j的长度=i
    if (j == i) p.data = x;
}

public int size(){
    Node<T> p = this.head.next;
    int j=0;
    for(; p!=null; p=p.next,j++);
    return j;
}

public Node<T> insert(int i, T x){
    if(x==null){
        return null;
    }
    Node<T> front = this.head;
    for (int j = 0; front.next!=null && j<i; j++,front=front.next);
    front.next = new Node<>(x,front.next);
    return front.next;
}

public T remove(int i){
    Node<T> front = this.head;
    for (int j = 0; front.next!=null && j<i; j++,front=front.next);
    //i=2时j=1
    //此时front指向的是第0个元素
    if(front.next==null){
        return null;
    }else{
        T x= front.next.data;
        front.next = front.next.next;
        return x;
    }
}

public void clear(){
    this.head.next=null;
}

}

class Node{

public T data;
public Node<T> next;
public  Node(T data, Node<T> next){
    this.data = data;
    this.next = next;
}

public Node(){
    this(null,null);
}

public String toString(){
    return this.data.toString();
}

}

发表新评论