您的位置:首页 > 编程语言 > Java开发

java 用链表实现线性表

2011-08-05 22:42 351 查看
packagecom.jzm;

publicclassMyLList<T>{
privateNodefirstNode;
privateintlength;//线性表的长度

privateclassNode{//私有内部类
privateTdata;
privateNodenext;

privateNode(TdataPortion){
data=dataPortion;
next=null;
}//endconstructor

/*privateNode(TdataPortion,NodenextNode){
data=dataPortion;
next=nextNode;
}//endconstructor
*/

}//end-Node

publicMyLList(){
clear();
}

publicbooleanisEmpty(){

returnlength<1?true:false;

}

publicfinalvoidclear(){
firstNode=null;
length=0;

}

privateNodegetNodeAt(intgivenPosition){
assert(!isEmpty())&&(1<=givenPosition)&&(givenPosition<=length);
NodecurrentNode=firstNode;
for(inti=1;i<givenPosition;i++){

currentNode=currentNode.next;
}
assertcurrentNode!=null;
returncurrentNode;
}

publicbooleanadd(TnewEntry){ //在末端加入元素
NodenewNode=newNode(newEntry);
if(isEmpty()){
firstNode=newNode;
}else{
NodelastNode=getNodeAt(length);
lastNode.next=newNode;//使最后一个结点引用指向新结点
}//end-if
length++;
returntrue;
}//endadd

publicbooleanadd(intnewPosition,TnewEntry){
if((newPosition>=1)&&(newPosition<=length+1)){

NodenewNode=newNode(newEntry);

if(isEmpty()||newPosition==1){//情况一
newNode.next=firstNode;
firstNode=newNode;
}else{
NodenodeBefore=getNodeAt(newPosition-1);
Nodenodeafter=nodeBefore.next;
newNode.next=nodeafter;
nodeBefore.next=newNode;
}//endelse
length++;
returntrue;

}elsereturnfalse;
}//endadd(,,)

publicTgetEntry(intgivenPosition){

Tresult=null;

if(!isEmpty()&&(givenPosition>=1)&&givenPosition<=length){

result=getNodeAt(givenPosition).data;
}
returnresult;
}
publicObjectremove(intgivenPosition){
Objectresult=null;
if(givenPosition<1||givenPosition>length||isEmpty()){
System.out.println("删除的位置不存在或者链表为空");
returnresult;
}elseif(givenPosition!=1){
NodedeleteNode=getNodeAt(givenPosition);
NodeNodebefore=getNodeAt(givenPosition-1);
Nodebefore.next=deleteNode.next;
length--;
returndeleteNode;
}else{
result=firstNode.data;
firstNode=firstNode.next;
length--;
returnresult;
}
}

publicvoiddisplay(){
if(length<1){
System.out.println("链表没数据!");
}else{
NodecurrentNode=firstNode;
for(inti=1;i<=length;i++){
System.out.println("第"+i+"个数据:"+currentNode.data);
currentNode=currentNode.next;
}
}//for
}//enddisplay

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: