双端链表: 比链表多了一些新的特性。
属性:新建了一个对结尾链接点的引用
方法:1.在表尾处可以插入一个链接点;普通链表的也可以,只不过要遍历整个链表才行。
2.可以访问表尾
3.但是,如果对结尾链接点进行删除操作,需要遍历列表。
 
package firstlast; 

public class Link { 

  public    long dData; 
  public Link next; 
  public Link(long dData){ 
    this.dData = dData; 
  } 
    
  public void displayLink(){ 
     
    System.out.println("{"+dData+"}"); 
  } 

 
 
package firstlast; 

public class FirstLastLink { 

    
  private Link first; 
    
  private Link last; 
    
  public FirstLastLink(){ 
    first = null
    last = null
  } 
    
  public boolean isEmpty(){ 
     
    return first == null
  } 
    
  public void insertFirst(long dd){ 
     
    Link newLink = new Link(dd); 
    if(isEmpty()){//如果原来是空的,更新尾节点;如果不为空,不需要对尾节点进行操作 
      last = newLink; 
    } 
    newLink.next = first; 
    first = newLink; 
     
  } 
    
  public void insertLast(long dd){ 
    Link newLink = new Link(dd); 
     
    if(isEmpty()){ 
      first = newLink; 
    }else
      last.next = newLink;//更新最后一个链接点,指向新链接点 
    }        
    last = newLink;  //更新尾节点,指向新链接点 
     
  } 
  public long deleteFirst(){ 
    if(first == null){ 
      System.out.println("没有数据"); 
      return 0; 
    } 
    long temp = first.dData; 
    if(first.next == null){ 
      last = null
    } 
    first = first.next; 
     
    return temp; 
  } 
    
    
  public long deleteLast(){ 
    long temp = last.dData; 
    if(first == null){ 
      System.out.println("没有数据"); 
      return 0; 
    } 
     
    return temp; 
  } 
  public void displayList(){ 
    Link current = first; 
    while(current !=null){ 
      current.displayLink(); 
      current = current.next; 
    } 
  } 
  public static void main(String[] args){ 
    FirstLastLink firstlastlink = new FirstLastLink(); 
    firstlastlink.insertFirst(1);     
    firstlastlink.insertFirst(2); 
    firstlastlink.insertLast(4); 
    firstlastlink.insertLast(0); 
     
    firstlastlink.deleteFirst(); 
    firstlastlink.d(); 
     
    firstlastlink.displayList(); 
  }