单链表的泛型操作

package genericlinklist; 
/*
 * @ suntong 
 * 
 * 
 * 
 */
class LinkList<T> {
	
	private Entry<T> head;//头结点 
	
	
	class Entry<T>{ 
		private T data; 
		public Entry<T> next;
		
		public Entry() { 
			data = null;
			next = null;
		} 
		public Entry(T val) { 
			this.data = val; 
			next = null;
		} 			
	} 	 
	public LinkList(){ 
		head = new Entry<T>(); 
		} 	 
	//头插
	public void insertHead(T val) 	{ 	
		Entry<T> entry = new Entry<T>(val); 	
		entry.next = head.next; 	
		head.next = entry; 	
				
		} 	 
	//尾插
	public void insertTail(T val) 	{ 	
		Entry<T> entry = new Entry<T>(val); 	
		Entry<T> cur = head;
		while(cur.next != null) {
			cur = cur.next;
		}
		cur.next = entry;				
	}
	//得到长度 储存数据节点的个数
	public int getLength(){
		Entry<T> cur = head.next;
		int len = 0;
		while(cur!=null) {
			len++;
			cur = cur.next;
		}
		return len;
	}
	//在指定位置插入节点 	
	public void addPos(int pos, T val) { 	
		if(pos < 0 || pos > getLength()-1) { 	
			return;
		} 
		if(pos == 0){ 
			insertHead(val); 	
		} 	
		Entry<T> entry = new Entry<T>(val); 	
		Entry<T> cur = head; 	
		Entry<T> prev = head; 	
		int tmp = 0; 	
		while(tmp != pos) { 	
			prev = cur; 
			cur = cur.next; 
			tmp++; 	
		} 	
		prev.next = entry; 
		entry.next = cur;  	
	} 	 
	//逆置
	public Entry<T> reverse() {
		Entry<T> newHead=null;
		Entry<T> cur = head; 	
		Entry<T> prev = null;
		while(cur!=null) {
			Entry<T> curNext = cur.next;
			if(curNext==null){
				newHead=cur;
			}
			cur.next = prev;
			prev = cur;
			cur = curNext;
		}
		
		return newHead;
	}
	//根据索引查找节点 
	public Entry<T> findByIndex(int pos) 	{ 
		if(pos < 0 || pos > getLength()-1) 		{ 	
			
			} 	
		int tmp = 0; 	
		Entry<T> current = head; 
			while(tmp != pos) { 	
				current = current.next; 
				tmp++; 	
			} 	
			return current; 
	} 
	
		//倒数第K个节点
	public T lastK(int k) {
		if (k <= 0 || k > getLength()) {
				return null;
		}
			Entry<T> cur1 = head;
			Entry<T> cur2 = head;
			while(k - 1 > 0) {
				if (cur2.next != null) {
					cur2 = cur2.next;
					--k;
				}else {
					return null;
				}
			}
			while (cur2.next != null) {
				cur1 = cur1.next;
				cur2 = cur2.next;
			}
			return cur1.data;
		}


	
		
    //打印
    public void show() 	{ 
	  Entry<T> cur = head.next; 
	  
		while(cur != null){ 				//最后一个节点了 
			System.out.println(""+cur.data); 		
					
		cur = cur.next; 
		
		} 
		
		System.out.println(); 
	}
    
    public void show2(Entry<T> entry) 	{ 
	   Entry<T> cur = entry; 
	   		while(cur.next!=null) {
	   			System.out.println("data:"+cur.data); 
	   			
		  cur = cur.next; 
		} 
	}
	@Override
	public String toString() {
		return "LinkList [head=" + head + ", getLength()=" + getLength() + ", reverse()=" + reverse() + ", getClass()="
				+ getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]";
	}
    
}

public class GenericLinkList {

	public static void main(String[] args) {
		
        LinkList<String> p1 = new  LinkList<String>();
        /*LinkList<Integer> p2 = new  LinkList<Integer>();
        p2.insertHead(19);
        p2.show();*/
        p1.insertHead("test1");
        p1.insertHead("test2");
        p1.insertHead("test3");
        p1.insertHead("test4");
        p1.show();
        
        p1.addPos(2, "test5");
        p1.show();
        
        System.out.println("-------");
        String str = p1.lastK(2);
        System.out.println(str);
        System.out.println("=======");
        p1.show2(p1.reverse());
        p1.show();
        
        System.out.println("-------");
        String str1 = p1.lastK(2);
        System.out.println(str1);
        System.out.println("=======");
        
        
	}

}

猜你喜欢

转载自blog.csdn.net/qq_41974391/article/details/80533967
今日推荐