package cn.fyl.first;
public class LinkedList implements List {
private Node head,tail; //头尾结点
private int size; //保存链表大小
//将值插入链表
public void add(Object o) {
add(size(),o);
}
//将值从index位置插入链表
public void add(int index, Object o) {
if(index == 0){
addFirst(o);
}
else if(index >= size){
addLast(o);
}
else{
Node current = head;
for (int i = 1; i < index; i++) {
current = current.next;
}
Node temp = current.next;
current.next = new Node(o);
(current.next).next = temp;
size++;
}
}
//取出index位置的值
public Object get(int index) {
if(index < 0 || index >=size){
return null;
}
else if(index == 0){
return head.data;
}
else if(index == size-1){
return tail.data;
}
else{
Node current = head;
for (int i = 1; i < index; i++) {
current = current.next;
}
Node temp = current.next;
return temp.data;
}
}
//删除index位置的值
public Object remove(int index) {
if(index < 0 || index >size)
return null;
else if(index ==0)
return head.data;
else if(index == size -1)
return tail.data;
else{
Node previous = head;
for (int i = 1; i < index; i++) {
previous = previous.next;
}
Node current = previous.next;
previous.next = current.next;
size--;
return current.data;
}
}
public int size() {
return size;
}
//添加头结点
public void addFirst(Object o) {
Node newNode = new Node(o);
newNode.next = head; //指向头引用所指结点
head = newNode; //头引用指向新增结点
size++;
if(tail == null){
tail = head;
}
}
//添加尾结点
public void addLast(Object o) {
Node newNode = new Node(o);
if(tail == null){
head = tail = newNode;
}
else{
tail.next = newNode;
tail = tail.next;
}
size++;
}
//删除头结点
public Object removeFirst(){
if(size == 0){
return null;
}
else if(size == 1){
Node temp = head;
head = tail = null;
size = 0;
return temp.data;
}
else{
Node temp = head;
head = head.next;
size--;
return temp.data;
}
}
//删除尾结点
public Object removeLast() {
if(size == 0){
return null;
}
else if(size ==1){
Node temp = head;
head =tail =null;
size =0;
return temp.data;
}
else{
Node current = head;
for (int i = 0; i < size - 2; i++) {
current = current.next;
}
Node temp =tail;
tail = current;
tail.next = null;
size--;
return temp.data;
}
}
private static class Node {
Object data;
Node next;
public Node(Object o){
data = o;
}
}
public static void main(String[] arg){
LinkedList l = new LinkedList();
l.add(0);
l.add(2);
l.add(4);
l.add(3, 1);
System.out.println(l.removeLast()+" "+l.removeFirst()+" "+l.get(0)+" "+l.get(1));
}
}