单链表代码
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();
}
}