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 }