exercise17_3.java

来自「java程序设计 机械工业出版社 书籍代码」· Java 代码 · 共 171 行

JAVA
171
字号
public class Exercise17_3 {
  public static void main(String[] args) {
    GenericLinkedList1 list1 = new GenericLinkedList1();
    list1.addLast("Happy Days!");
    list1.addLast("Grrr!");
    list1.addLast("Welcome to Java!");
    list1.addLast("Hello World!");

    // Prints list as is.
    list1.printList();

    // Adds a node after Grrr!
    list1.add("I'm sorry!!!",2);

    // Prints list.
    list1.printList();

    // Removes the added node.
    list1.remove(3);

    // Prints list.
    list1.printList();

    // Sorts list.
    list1 = list1.sort(list1);
    list1.printList();
  }
}

class GenericLinkedList1 {
  public TreeNode first;
  public TreeNode last;
  public int count = 0;

  public void addFirst(Object e) {
    if(first == null) {
      first = new TreeNode(e);
      last = first;
    }
    else {
      TreeNode temp = first;
      first = new TreeNode(e);
      first.next = temp;
      temp.previous = first;
    }
    count++;
  }

  public void addLast(Object e) {
    if(last == null) {
      last = new TreeNode(e);
      first = last;
    }
    else {
      TreeNode temp = last;
      last = new TreeNode(e);
      last.previous = temp;
      temp.next = last;
    }
    count++;
  }

  /**
   *  Adds new TreeNode after specified index
   */
  public void add(Object e, int index) {
    if (index == 0) addFirst(e);
    else if (index == count) addLast(e);
    else {
      TreeNode current = first;
      for(int i = 1; i <= index-1; i++)
        current = current.next;
      TreeNode insert = new TreeNode(e);
      insert.next = current.next;
      insert.previous = current;
      current.next.previous = insert;
      current.next = insert;
      count++;
    }
  }

  public void removeFirst() {
    if(first != null) {
      first = first.next;
      if(first != null)
        first.previous = null;
      count--;
    }
  }

  public void removeLast() {
    if(last != null) {
      last = last.previous;
      last.next = null;
      count--;
    }
  }

  /**
   *   Removes node at index
   */
  public void remove(int index) {
    if (index == 1) removeFirst();
    else if (index == count) removeLast();
    else {
        TreeNode current = first;
        for(int i = 1; i <= index-1; i++)
          current = current.next;
        current.previous.next = current.next;
        current.next.previous = current.previous;
        count--;
    }
  }

  public GenericLinkedList1 sort(Object o) {
    GenericLinkedList1 toReturn = new GenericLinkedList1();
    for(int k = 0; k <=((GenericLinkedList1) o).count + 2; k++) {
       TreeNode min =((GenericLinkedList1) o).first;
       TreeNode current = ((GenericLinkedList1) o).first.next;
       if(current == null) {
         toReturn.addLast(min);
       }
       int minIndex = 1;
       for(int i = 1; i < ((GenericLinkedList1) o).count;i++) {
         if(((Comparable)min.element).compareTo(current.element) >= 0) {
           min = current;
           minIndex = i + 1 ;
         }
         current = current.next;
       }

       if((min.element.equals(((GenericLinkedList1)o).first.element)) &&
          (min.element.equals(((GenericLinkedList1)o).last.element))) {
         min.previous = null;
         min.next = null;
       }

       if(minIndex == 1) {
         ((GenericLinkedList1)o).removeFirst();
       }
       else if(minIndex == count) {
         ((GenericLinkedList1)o).removeLast();
       }
       else {
         ((GenericLinkedList1)o).remove(minIndex);
       }
       toReturn.addLast(min.element);
    }
    return toReturn;
  }

  public void printList() {
    TreeNode temp = this.first;
    while(temp != null) {
      System.out.print(temp.element.toString() + " ");
      temp = temp.next;
    }
    System.out.println();
  }

  private class TreeNode {
    public Object element;
    public TreeNode next;
    public TreeNode previous;

    public TreeNode(Object e) {
      element = e;
    }
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?