zoukankan      html  css  js  c++  java
  • 双链表---LinkedList的重写

    重写Linkedlist类,改写为MyLinkedList,未继承Iterable类。
    public class MyLinkedList<AnyType>  {
        private int theSize;
        private Node<AnyType> beginMarker;
        private Node<AnyType> endMarker;
        
    	private static class Node<AnyType>{          //定义匿名类Node
    		public Node(AnyType d,Node<AnyType> p,Node<AnyType> n){
    			this.data=d;
    			this.prev=p;
    			this.next=n;
    		}
    		public AnyType data;
    		public Node<AnyType> prev;
    		public Node<AnyType> next;
    	}
    	
    	public MyLinkedList(){                         //构造方法
    		beginMarker=new Node<AnyType>(null,null,null);
    		endMarker=new Node<AnyType>(null,beginMarker,null);
    		beginMarker.next=endMarker;
    		theSize=0;
    	}
    	
    	public int size(){                     //单链表cdu
    		return theSize;
    	}
    	
    	public boolean isEmploy(){               //判断长度
    		return size()==0;
    	}
    	
    	public Node<AnyType> getNode(int idx){             //返回idx对应的结点
    		Node<AnyType> p;
    		if(idx<0||idx>size())
                throw new IndexOutOfBoundsException(  );
    		if(idx<size()/2){
    			p=beginMarker.next;
    			for(int i=0;i<idx;i++)
    				p=p.next;
    		}
    		else{
    			p=endMarker;
    			for(int i=size();i>idx;i--)
    				p=p.prev;
    		}
    		 return p;	    
    	}
    	
    	public AnyType get(int idx){     //返回idx位置的数据
    		return getNode(idx).data;
    	}
    	
    	public AnyType set(int idx,AnyType newVal){
    		Node<AnyType> p=getNode(idx);
    		AnyType oldVal=get(idx);
    		p.data=newVal;
    		return oldVal;
    	}
    	
    	public boolean add(AnyType x){     //插入元素
    		add(size(),x);
    		return true;
    	}
    	private void addBefore(Node<AnyType> p,AnyType x){
    		Node<AnyType> newNode=new Node<AnyType>(x,p.prev,p);
    		newNode.prev.next=newNode;
    		p.prev=newNode;
    		theSize++;
    	}
    	public void add(int idx,AnyType x){
    		Node<AnyType> p;
    		p=getNode(idx);
    		addBefore(p,x);	
    	}
    	
    	public AnyType remove(int idx){              //删除元素
    		return remove(getNode(idx));
    	}
    	public AnyType remove(Node<AnyType> p){
    		p.next.prev=p.prev;
    		p.prev.next=p.next;
    		theSize--;
    		return p.data;
    	}
    	
    	public static void main(String[] args) {
    	      //验证部分
    		MyLinkedList<String> La=new MyLinkedList<String>();
    		La.add("aaa");
    		La.add("bbb");
    		La.add("ccc");
    		La.add("ddd");
    		La.add("eee");
    		for(int i=0;i<La.size();i++){
    			System.out.println(i+": "+La.getNode(i).data);
    		}
    		System.out.println("......................");
    		La.add(2,"fff");
    		La.remove(0);
    		La.set(4,"ggg");
    		for(int i=0;i<La.size();i++){
    			System.out.println(i+": "+La.get(i));
    		}
    	}
    
    }
    

  • 相关阅读:
    用函数装饰一首诗
    [转]最常用的15大Eclipse开发快捷键技巧
    [转]python 模块 chardet下载及介绍
    python手动设置递归调用深度
    view-xpath
    开源项目的贡献流程
    MIT许可证
    scrapy分布式的几个重点问题
    【bzoj1026】[SCOI2009]windy数 数位dp
    【bzoj5064】B-number 数位dp
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3752279.html
Copyright © 2011-2022 走看看