zoukankan      html  css  js  c++  java
  • Java数据结构——双向链表

    //=================================================
    // File Name       :	DoublyLinked_demo
    //------------------------------------------------------------------------------
    // Author          :	Common
    
    
    //类名:DoublyLinkedList
    //属性:
    //方法:
    class DoublyLinkedList{				//双向链表
    	private Link_long first;
    	private Link_long last;
    	
    	public DoublyLinkedList(){		//构造函数
    		this.first = null;
    		this.last = null;
    	}
    	
    	public boolean isEmpty(){
    		return first==null;
    	}
    	
    	public void insertFirst(long dd){		//从链表的头开始插入
    		Link_long newLink = new Link_long(dd);
    		if(isEmpty()){
    			last = newLink;				//不用改变first
    		}else{
    			first.previous = newLink;		//插入新的元素
    		}
    		newLink.next = first;					//插入新的元素
    		first = newLink;							//修改first的位置
    	}
    	
    	public void insertLast(long dd){		//从链表的尾开始插入
    		Link_long newLink = new Link_long(dd);
    		if(isEmpty()){
    			first = newLink;			//不用改变last
    		}else{
    			last.next = newLink;		//在last后面添加新元素,并修改last的位置
    			newLink.previous = last;
    		}
    		last = newLink;						//注意:只有一个元素的时候,插入要把last也赋为newLink
    	}
    	
    	public Link_long deleteFirst(){				//从链表的头删除一个元素
    		Link_long temp = first;		//暂存first
    		if(first.next == null){			//如果只有一个元素,把last也赋为null
    			last = null;
    		}else{
    			first.next.previous = null;
    		}
    		first = first.next;			//把next设为first
    		return temp;				//返回原来的first
    	}
    	
    	public Link_long deleteLast(){				//从链表的头删除一个元素
    		Link_long temp = last;		//暂存last
    		if(first.next == null){			//如果只有一个元素,把first也赋为null
    			first = null;
    		}else{
    			last.previous.next = null;
    		}
    		last = last.previous;			//把previous设为last
    		return temp;						//返回原来的last
    	}
    	
    	public boolean insertAfter(long key,long dd){		//在特定元素后面插入
    		Link_long current = first;
    		while(current.dData != key){
    			current = current.next;
    			if(current == null){
    				return false;
    			}
    		}
    		Link_long newLink = new Link_long(dd);
    		
    		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_long deleteKey(long key){		//删除指定元素
    		Link_long current = first;
    		while(current.dData != key){
    			current = current.next;
    			if(current == null){
    				return null;
    			}
    		}
    		if(current == first){					//如果第一个元素匹配,则删除,并把first向后移动
    			first = current.next;
    		}else{
    			current.previous.next = current.next;		//改变current上一个元素的next的指向
    		}
    		if(current == last){
    			last = current.previous;	//如果最后一个元素匹配,则删除,并把previous向前移动
    		}else{
    			current.next.previous = current.previous;	//改变current后一个元素的previous的指向
    		}
    		return current;
    	}
    	
    	public void displayForward(){
    		System.out.println("List(first-->last):");
    		Link_long current = first;			//用于不断改变位置实现遍历
    		while(current != null){
    			current.displayLink();
    			current = current.next;
    		}
    	}
    	
    	public void displayBackward(){
    		System.out.println("List(last-->first):");
    		Link_long current = last;			//用于不断改变位置实现遍历
    		while(current != null){
    			current.displayLink();
    			current = current.previous;
    		}
    	}
    	
    }
    
    //主类
    //Function        : 	DoublyLinked_demo
    public class DoublyLinked_demo {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		DoublyLinkedList theList = new DoublyLinkedList();
    		
    		theList.insertFirst(40);
    		theList.insertFirst(30);
    		theList.insertFirst(20);
    		theList.insertFirst(10);
    		theList.displayForward();
    		theList.displayBackward();
    		
    		theList.insertAfter(20, 25);
    		theList.displayForward();
    		theList.displayBackward();
    		
    		theList.deleteFirst();
    		theList.displayForward();
    		
    		theList.deleteKey(20);
    		theList.displayForward();
    	}
    
    }
    

     

  • 相关阅读:
    由于媒体16摘要天
    vim note (2)
    JEECG 什么是商业版本的功能最近添加的好友?
    图解linux启动过程
    Error: unrecognized flag -version
    基于RDP瘦客户机协议的简要说明
    Android在网络上分析获取图片(支持bmp格式)
    [React] Validate Custom React Component Props with PropTypes
    [Python] Wikipedia Crawler
    [Python] Python list slice syntax fun
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5340330.html
Copyright © 2011-2022 走看看