package com.coding.basic;
public class LinkedList implements List {
private Node head;
private Node tail;
private int size;
//将最后一个节点的指针指向要插入的元素
public void add(Object o){
Node newnode = new Node();
newnode.setData(o);
//linkedList头元素为空的话,把此插入的新元素作为头元素
if (head==null) {
head = newnode;
size ++;
}else {
//若头元素不为空,则把插入的节点newnode设置为(LinkedList)的末节点
tail.setNext(newnode);
tail = newnode;
size ++;
}
}
//将index上一个索引的指针指向o,将o的指针指向原index元素
public void add(int index , Object o){
if(head==null){
System.out.println("LinkedList长度为0");
}
if(index>size()){
System.out.println("IndexOutOfBound");
}
Node temp = head;
Node newnode = new Node();
newnode.setData(o);
for (int i = 0; i < index-1; i++) {
temp = temp.getNext();
}
if(temp.getNext()==null){
temp.setNext(newnode);
size ++;
}else{
temp.setNext(newnode);
newnode.setNext(temp.getNext());
size ++;
}
}
public Object get(int index){
Node temp = head;
int a =0;
while (a<=index) {
temp = temp.getNext();
a += 1;
return temp.getData();
}
return null;
}
public Object remove(int index){
if(head==null){
return null;
}
Node temp = head;
Object i = get(index);
while(temp.getNext()!=i){
temp = temp.getNext();
}
temp.setNext(temp.getNext().getNext());
size--;
return i;
}
public int size(){
size = 0;
if (head==null) {
System.out.println("LikedList长度为0");
return size;
}
Node temp = head;
while(temp.getNext()!=null){
size += 1;
temp = temp.getNext();
}
return size;
}
public void addFirst(Object o){
Node newnode = new Node();
newnode.setData(o);
newnode.setNext(head);
size++;
}
public void addLast(Object o){
Node newnode = new Node();
newnode.setData(o);
tail.setNext(newnode);
newnode.setNext(null);
size++;
}
public Object removeFirst(){
if(head==null){
return null;
}
head.setNext(null);
return get(0);
}
public Object removeLast(){
Object i = get(size-1);
Node newnode = new Node();
newnode.setData(i);
newnode.setNext(null);
return i;
}
public Iterator iterator(){
return null;
}
private static class Node{
Object data;
Node next;
//获取当前节点数据
public Object getData(){
return data;
}
//设置当前节点数据
public void setData(Object data){
this.data = data;
}
//返回下一个节点
public Node getNext(){
return next;
}
//设置下一个节点
public void setNext(Node next){
this.next = next;
}
}
}