计算机二级JAVA实例编程练习题6(附答案)
来源:优易学  2011-10-29 12:04:07   【优易学:中国教育考试门户网】   资料下载   IT书店

  题目:
  用Java实现一个完整的双向链表类,并向外提供头、尾节点的增删操作,任意节点的增删操作,获取任意节点,并且要求链表能以字符形式进行输出!
  答:
  /**
  *
  */
  package util;
  /**
  * 这个一个完整的双向链表,通过private私有化基础的链表操作,通过public包装向外暴露操作柄。
  *
  */
  public class DoubleLinkedListTest {
  /**
  * The Test in main should not test in a time!
  * @param args
  */
  public static void main(String[] args) {
  DoubleLinkedList dll = new DoubleLinkedList();
  //Initialize
  dll.add("HH");
  dll.add("II");
  dll.add("JJ");
  System.out.println(dll);
  //add first
  dll.addFirst("AA");
  System.out.println(dll);
  //add last
  dll.addLast("ZZ");
  System.out.println(dll);
  //add in some location
  dll.add(4, "Daniel");
  System.out.println(dll);
  //remove first node
  dll.removeFirst();
  System.out.println(dll);
  //remove last node
  dll.removeLast();
  System.out.println(dll);
  //remove node in some index
  dll.remove(2);
  System.out.println(dll);
  //get the node of some index
  System.out.println(dll.get(1));
  }
  }
  class DoubleLinkedList{
  //Node class
  public class Node{
  //Attribute of the node
  Object value;
  Node prev=this;
  Node next=this;
  //construct
  public Node(Object value){
  this.value=value;
  }
  //to String
  public String toString(){
  return value.toString();
  }
  }
  //Attributes of the DoubleLinkedList
  private Node head=new Node(null);
  private int size;
  //base operate of the doubleLinkedList
  private void addBefore(Node newNode, Node node){
  newNode.prev=node.prev;
  newNode.next=node;
  newNode.prev.next=newNode;
  newNode.next.prev=newNode;
  size++;
  }

  private void addAfter(Node newNode, Node node){
  newNode.prev=node;
  newNode.next=node.next;
  newNode.prev.next=newNode;
  newNode.next.prev=newNode;
  size++;
  }
  private void removeNode(Node node){
  node.prev=null;
  node.next=null;
  node.prev.next=node.next;
  node.next.prev=node.prev;
  size--;
  }
  //get the node of index
  private Node getNode(int index){
  //validate
  if (index<0 || index>=size) {
  throw new IndexOutOfBoundsException("Index out of bounds!");
  }
  Node node = head.next;
  for (int i = 0; i < index; i++)
  node = node.next;
  return node;
  }
  //For print this linkedlist
  public String toString(){
  StringBuffer sb=new StringBuffer("{");
  Node node=head;
  for (int i = 0; i < size; i++) {
  node=node.next;
  if (i>0) {
  sb.append(",");
  }
  sb.append(node.value);
  }
  sb.append("}");
  return sb.toString();
  }
  //Easy use operate handler of the link
  //Add
  public boolean addLast(Object o) {
  addBefore(new Node(o), head);
  return true;
  }
  public boolean addFirst(Object o)
  {
  addAfter(new Node(o), head);
  return true;
  }
  public boolean add(int index, Object o)
  {
  addBefore(new Node(o), getNode(index));
  return true;
  }
  public boolean add(Object o)
  {
  return addLast(o);
  }
  //remove
  public boolean removeLast()
  {
  removeNode(head.prev);
  return true;
  }
  public Object get(int index)
  {
  return getNode(index).value;
  }
  public boolean remove(int index)
  {
  removeNode(getNode(index));
  return true;
  }
  public boolean removeFirst()
  {
  removeNode(head.next);
  return true;
  }
  //tool
  public int getSize(){
  return size;
  }
  }

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训