/**
* establish a single linked list
* 创建一个单链表
* @author fred
*
*/
public class SingleLinkedList<E> {
private Node<E> head;
private E data;
private int size;
//constructor
public SingleLinkedList() {
head = new Node();
}
//get the size of the list
//得到该链表的大小
public int getSize() {
return size;
}
//insert data into the end of the list
//向链表顺序添加data
public void add(E data) {
Node<E> node = new Node(data, null);
Node<E> temp = head;
while(temp.next != null) {
temp = temp.next;
}
temp.next = node;
size++;
}
//insert data into the list at the special position
//在链表中指定的位置index添加data
public void insertByIndex(E data, int index) {
if(index < 1 || index > size) {
System.out.println("脚标越界");
return;
}
Node<E> node = new Node(data, null);
Node<E> temp = head;
int count = 1;
while(temp.next != null) {
if(count++ == index) {
node.next = temp.next;
temp.next = node;
size++;
return;
}
else {
temp = temp.next;
}
}
}
//delete the data at a sepcial position
//删除链表中指定位置的数据
public void deleteByIndex(int index) {
Node<E> temp = head;
int count = 1;
while(temp.next != null) {
if(count++ == index) {
temp.next = temp.next.next;
return;
}
else {
temp = temp.next;
}
}
}
//clear the list
//清空链表
public void clear() {
size = 0;
head.next = null;
}
@Override
public String toString() {
String result = "data: ";
Node<E> temp = head;
while(temp.next != null) {
temp = temp.next;
result += temp.data + ", ";
}
return result;
}
//establish a inner Node class
//叶子类
private class Node<E>{
private E data;
private Node<E> next;
public Node(){
this.data = null;
this.next = null;
}
public Node(E data, Node<E> next) {
this.data = data;
this.next = next;
}
}
}