熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java實現雙向鏈表

2013-11-23 19:15:14  來源: Java核心技術 

  自定異常類

  Java代碼

  public class MyException extends Exception {

  public MyException(){};

  public MyException(String msg){

  super(msg);

  }

  }

  鏈表結點對像

  Java代碼

  public class Node {

  public Node previou=null;//前結點指針

  public Node next=null;   //後結點指針

  public Object value;//結點值

  Node(Object value){

  thisvalue=value;

  }

  }

  鏈表對像

  Java代碼

  public class DoubleLinked {

  private Node head;//鏈表頭

  DoubleLinked(){

  }

  /**

  * 判斷是否還有下一個結點沒有則為鏈表的尾結點

  * @param node

  * @return

  */

  public boolean hasNext(Node node){

  if(nodenext==null)

  return false;

  return true;

  }

  /**

  * 判斷是否有上一個結點沒有則為鏈表的頭結點

  * @param node

  * @return

  */

  public boolean hasPrev(Node node){

  if(nodepreviou==null)

  return false;

  return true;

  }

  /**

  * 獲取鏈表頭元素

  * @return

  * @throws MyException

  */

  public Node getHead() throws MyException{

  if(head==null){

  throw new MyException(鏈表為空);

  }

  return head;

  }

  /**

  * 獲取上一個接點

  * @param node

  * @return

  */

  public Node getPrev(Node node){

  return nodepreviou;

  }

  /**

  * 獲取下一個結點

  * @param node

  * @return

  */

  public Node getNext(Node node){

  return nodenext;

  }

  /**

  * 根據索引獲取結點

  * @param index結點索引

  * @return

  * @throws MyException

  */

  public Node getNode(int index) throws MyException{

  Node curNode=null;

  Node next=null;

  Node node=null;

  if(head==null){

  throw new MyException(鏈表為空);

  }else{

  curNode=head;

  for(int i=;i<index;i++){

  if(curNode==null){

  throw new MyException(你要獲取的元素索引大於鏈表長度);

  }else{

  node=curNode;

  if(hasNext(curNode)){

  next=curNodenext;

  curNode=next;

  }else{

  curNode=null;

  }

  }

  }

  }

  return node;

  }

  /**

  * 獲取最後一個結點

  * @return

  * @throws MyException

  */

  public Node getLast() throws MyException{

  Node curNode=null;

  Node next=null;

  Node last=null;

  boolean flag=true;

  if(head==null){

  throw new MyException(鏈表為空);

  }else{

  curNode=head;

  while(flag){

  if(hasNext(curNode)){

  next=curNodenext;

  curNode=next;

  }else{

  last=curNode;

  flag=false;

  }

  }

  }

  return last;

  }

  /**

  * 在鏈表頭添加新結點

  * @param node

  */

  public void addHead(Node node){

  if(head==null){

  head=node;

  }else{

  nodenext=head;

  headpreviou=node;

  head=node;

  }

  }

  /**

  * 在鏈表末尾處添加新結點

  * @param node

  * @throws MyException

  */

  public void addLast(Node node) throws MyException{

  if(head==null){

  head=node;

  }else{

  Node last=thisgetLast();

  lastnext=node;

  nodepreviou=last;

  }

  }

  /**

  * 在鏈表中間插入新結點

  * @param node

  * @throws MyException

  */

  public void insertNode(int indexNode node) throws MyException{

  Node indexNode=thisgetNode(index);

  Node prev=indexNodepreviou;

  prevnext=node;

  nodepreviou=prev;

  nodenext=indexNode;

  indexNodepreviou=node;

  }

  /**

  * 刪除鏈表頭結點

  * @return

  * @throws MyException

  */

  public Node deleteHead() throws MyException{

  Node head=thisgetHead();

  if(hasNext(head)){

  Node next=headnext;

  thishead=next;

  nextpreviou=null;

  }

  return head;

  }

  /**

  * 刪除鏈表的最後一個結點

  * @return

  * @throws MyException

  */

  public Node deleteLast() throws MyException{

  Node last=thisgetLast();

  Node prev=lastpreviou;

  if(prev==null){

  thishead=null;

  }else{

  prevnext=null;

  }

  return last;

  }

  /**

  * 根據索引刪除鏈表結點

  * @param index

  * @return

  * @throws MyException

  */

  public Node deleteNode(int index) throws MyException{

  Node node=thisgetNode(index);

  Node prev=nodepreviou;

  Node next=nodenext;

  if(prev==null && next!=null){

  thishead=next;

  nextpreviou=null;

  }

  if(prev!=null && next==null){

  prevnext=null;

  }

  if(prev==null && next==null){

  thishead=null;

  }

  if(prev!=null && next!=null){

  prevnext=next;

  nextpreviou=prev;

  }

  return node;

  }

  } :!:


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26531.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.