package com.jzm;
public class MyLList <T> {
private Node firstNode;
private int length; //线性表的长度
private class Node{ //私有内部类
private T data ;
private Node next;
private Node(T dataPortion){
data = dataPortion;
next = null;
}//end constructor
/*private Node (T dataPortion,Node nextNode){
data = dataPortion;
next = nextNode;
} //end constructor
*/
}//end-Node
public MyLList() {
clear();
}
public boolean isEmpty(){
return length < 1?true:false;
}
public final void clear(){
firstNode = null;
length = 0;
}
private Node getNodeAt(int givenPosition){
assert (!isEmpty())&&(1<= givenPosition) &&(givenPosition <=length);
Node currentNode = firstNode;
for(int i=1;i< givenPosition;i++){
currentNode = currentNode.next;
}
assert currentNode != null;
return currentNode;
}
public boolean add(T newEntry){ //在末端加入元素
Node newNode = new Node(newEntry);
if(isEmpty()){
firstNode = newNode;
}else {
Node lastNode = getNodeAt(length);
lastNode.next = newNode; //使最后一个结点引用指向新结点
}//end-if
length++;
return true;
}//end add
public boolean add(int newPosition,T newEntry){
if((newPosition>=1)&& (newPosition<=length+1)){
Node newNode= new Node(newEntry);
if(isEmpty() || newPosition==1){ //情况一
newNode.next = firstNode;
firstNode = newNode;
}else{
Node nodeBefore = getNodeAt(newPosition-1);
Node nodeafter = nodeBefore.next;
newNode.next = nodeafter;
nodeBefore.next = newNode;
}//end else
length++;
return true;
}else return false;
}//end add(,,)
public T getEntry(int givenPosition){
T result = null;
if(!isEmpty()&&(givenPosition >=1) && givenPosition<= length){
result = getNodeAt(givenPosition).data;
}
return result;
}
public Object remove(int givenPosition){
Object result = null;
if(givenPosition <1 ||givenPosition>length ||isEmpty()){
System.out.println("删除的位置不存在或者链表为空");
return result;
}else if(givenPosition != 1){
Node deleteNode = getNodeAt(givenPosition);
Node Nodebefore = getNodeAt(givenPosition-1);
Nodebefore.next = deleteNode.next;
length--;
return deleteNode;
}else{
result = firstNode.data;
firstNode = firstNode.next;
length--;
return result;
}
}
public void display(){
if(length <1){
System.out.println("链表没数据!");
}else{
Node currentNode = firstNode;
for (int i = 1; i <= length; i++) {
System.out.println("第"+i+"个数据:"+currentNode.data);
currentNode = currentNode.next;
}
} //for
}//end display
}