实现一个基于双向链表的双端队列

package day1_30_5_2;

public class DoubleLinkedList {

	private Link first;
	private Link last;
	
	public DoubleLinkedList(){
		first = null;
		last = null;
	}
	
	//判断是不是为空
	public boolean isEmpty(){
		return first == null;
	}
	
	//在双向链表的前端插入
	public void insertFirst(long dd){
		Link newLink = new Link(dd);
		if(isEmpty()){//如果双向链表为空,就让last指针直接指向新创建的节点
			last = newLink;
		}else
			first.previous = newLink;
		    newLink.next = first;
		    first = newLink;
	
				
	}
	
	//在双向链表的后端插入
	public void insertLast(long dd){
		Link newLink = new Link(dd);
		if(isEmpty()){
			first = newLink;
		}else{
			last.next = newLink;
			newLink.previous = last;
			
		}
		last = newLink;
		
		
		
	}
	
	//删除第一个节点的实现
	public Link deleteFirst(){
		
		Link temp = first;
		if(first.next == null){//如果只有一个元素
			last = null;
		}
		else
			first.next.previous = null;
		    first = first.next;
		    return temp;
		
	}
	
	//删除最后一个节点的实现
	public Link deleteLast(){
		Link temp = last;
		if (first.next == null) // if only one item  
            first = null; // first --> null  
        else  
            last.previous.next = null; // old previous --> null  
        last = last.previous; // old previous <-- last  
        return temp;
	}
	
	//在某个元素的后面添加一个元素,insert dd after key
	public boolean insertAfter(long key,long dd){
		Link current = first;
		
		while(current.dData != key){
			current = current.next;
			if(current == null){
				return false;
			}
		}
		//创建一个新的节点
		Link newLink = new Link(dd);
		//current  在last
		if(current == last){
			newLink.next = null;
			last = newLink;
		}else{//不是最后一个节点
			newLink.next = current.next;
			current.next.previous = newLink;
			
			
		}
		
		newLink.previous = current;
		current.next = newLink;
		return true;
	}
	
	public Link deleteKey(long key){
		
		 Link current = first; // start at beginning  
	        while (current.dData != key) // until match is found,  
	        {  
	            current = current.next; // move to next link  
	            if (current == null)  
	                return null; // didn't find it  
	        }  
	        if (current == first) // found it; first item?  
	            first = current.next; // first --> old next  
	        else  
	            // not first  
	            // old previous --> old next  
	            current.previous.next = current.next;  
	  
	        if (current == last) // last item?  
	            last = current.previous; // old previous <-- last  
	        else  
	            // not last  
	            // old previous <-- old next  
	            current.next.previous = current.previous;  
	        return current; // return value  
		
	}
	
	
	public void displayForward() {  
        System.out.print("List (first-->last): ");  
        Link current = first; // start at beginning  
        while (current != null) // until end of list,  
        {  
            current.displayLink(); // display data  
            current = current.next; // move to next link  
        }  
        System.out.println("");  
    }  
  
    // -------------------------------------------------------------  
    public void displayBackward() {  
        System.out.print("List (last-->first): ");  
        Link current = last; // start at end  
        while (current != null) // until start of list,  
        {  
            current.displayLink(); // display data  
            current = current.previous; // move to previous link  
        }  
        System.out.println("");  
    }  
	
	
	
	
	
}

  

转载于:https://www.cnblogs.com/aicpcode/p/4262635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值