package com.coding.basic;
public class LinkedList implements List {
private Node head;
private Node last;
private int size = 0;
public void add(Object o){
if (head==null) {
head=new Node(o);
last=head;
}else{
Node node = new Node(o);
last.setNext(node);
last = node;
}
size = size + 1;
}
public void add(int index , Object o){
if (index >=0 && index<=this.size && size>0) {
if (index == 0) {
this.addFirst(o);
}else if(index == size){
this.addLast(o);
}else{
int num = 0;
Node node = head;
Node node1 = null;
Node nodenew = new Node(o);
Node node3 = null;
while (num <= index){
if(index - 1 == num){
node1 = node;
}else if(index == num){
node3 = node;
}
node = node.next;
num = num +1;
};
nodenew.setNext(node3);
node1.setNext(nodenew);
size = size + 1;
}
}else{
System.out.println("ָ��Խ��");
}
}
public Object get(int index){
if (index >=0 && index<=this.size && size>0) {
int num = 0;
Node node = head;
while (num < size){
if(index == num){
return node.getData();
}else{
node = node.next;
num = num +1;
}
};
}else{
System.out.println("ָ��Խ��");
return null;
}
return null;
}
public Object remove(int index){
if (index >=0 && index<=this.size && size>0) {
if (index == 0) {
return this.removeFirst();
}else if(index+1==size){
return this.removeLast();
}else{
int num = 0;
Node node = head;
Node node1 = null;
Node node2 = null;
Node node3 = null;
while (num <= index+1){
if(index - 1 == num){
node1 = node;
}else if(index+1 == num){
node3 = node;
}else if(index == num){
node2 = node;
}
node = node.next;
num = num +1;
};
node1.setNext(node3);
size = size - 1;
return node2.data;
}
}else{
System.out.println("ָ��Խ��");
return null;
}
}
public int size(){
return size;
}
public void addFirst(Object o){
Node node = new Node(o);
node.setNext(head);
head = node;
size = size + 1;
}
public void addLast(Object o){
Node node = new Node(o);
last.setNext(node);
last = node;
size = size + 1;
}
public Object removeFirst(){
Object obj = null;
if(size > 0){
obj = head.data;
head = head.next;
}else{
System.out.println("ָ��Խ��");
return null;
}
size = size - 1;
return obj;
}
public Object removeLast(){
Object obj = null;
if(this.size() > 0){
if(this.size()==1){
obj = head.data;
this.head = null;
}else if (this.size()==2) {
obj = head.next.data;
this.head.setNext(null);
}else{
int num = 0;
Node node = head;
Node node1 = null;
Node node2 = null;
Node node3 = null;
while (num <= size-2){
if(size - 2 == num){
obj = node.next.data;
node.setNext(null);
last = node;
}else{
node = node.next;
}
num = num +1;
};
}
}else{
System.out.println("ָ��Խ��");
return null;
}
size = size - 1;
return obj;
}
public Iterator iterator(){
return new IteratorLinkedList(this.head);
}
static class Node{
Object data;
Node next;
public Node(Object object) {
data = object;
}
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;
}
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
// System.out.println(list.removeLast());
// System.out.println(list.removeFirst());
// list.add(3,"xxxxxx");
// System.out.println("======="+list.removeFirst());
// System.out.println(list.size());
//
// System.out.println("list.get0========"+list.get(0));
// System.out.println("list.get1========"+list.get(1));
// System.out.println("=============");
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
Iterator it = list.iterator();
while(it.hasNext()){
String str = (String) it.next();
System.out.println("str====="+str);
}
}
}