现在的位置: 首页 > 综合 > 正文

java 用链表实现线性表

2013年09月12日 ⁄ 综合 ⁄ 共 2036字 ⁄ 字号 评论关闭
 
 
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	 
	 
	 
}

 

抱歉!评论已关闭.