Java package 双向循环链表;import java.util.Scanner;/** * * @author 黄良运 * time:2017.12.5 * * @param */public class DoubleCircleLinkedList { public static class Node { Node prevNode; Node nextNode; AnyType data; public Node(){ t
package 双向循环链表; import java.util.Scanner; /** * * @author 黄良运 * time:2017.12.5 * * @param */ public class DoubleCircleLinkedList { public static class Node { Node prevNode; Node nextNode; AnyType data; public Node(){ this(null); } public Node(AnyType data){ this(data,null,null); } public Node(AnyType data,Node prevNode, Node nextNode) { super(); this.data = data; this.prevNode =prevNode; this.nextNode = nextNode; } } private Node head; int size; public DoubleCircleLinkedList() { head = new Node (null); head.nextNode = head; head.prevNode = head; size = 0; } public int size(){ return size; } public boolean isEmpty(){ return size==0; } //验证范围合法性 public void validate(int index) throws Exception{ if(index<0||index>size()){ throw new Exception(index<0?"查找节点小于0":"查找节点超出范围"); } return ; } public Node getNode(int index) throws Exception{ Node p = head; validate(index); if(indexindex;i--) p=p.prevNode; } return p; } public AnyType get(int index) throws Exception{ validate(index); return getNode(index).data; } public void display() throws Exception{ Node p = head.nextNode.nextNode; for(int i=0;i<=size();i++){ System.out.print(p.data+" "); p=p.nextNode; } System.out.println(); } public void insert(int index,AnyType data) throws Exception{ if(index==0){ Node p = new Node (data,head,head.nextNode); head.nextNode.prevNode=p;//头的前驱节点等于尾 head.nextNode=p; size++; return ; } Node q = getNode(index); Node p = new Node<>(data,q.prevNode,q); q.prevNode.nextNode=p; q.prevNode=p; size++; return ; } public void addHead(AnyType data) throws Exception{ insert(0, data); } public void addRear(AnyType data){ Node p = new Node<>(data,head.prevNode,head); head.prevNode.nextNode=p; head.prevNode=p; size++; return; } public void remove(int index) throws Exception{ validate(index); Node p =getNode(index); p.prevNode.nextNode=p.nextNode; p.nextNode.prevNode=p.prevNode; size--; p=null; } public AnyType remove(Node p){ p.prevNode.nextNode = p.nextNode; p.nextNode.prevNode = p.prevNode; size--; return p.data; } public void inverse(){ Node p , q , k; p = head.nextNode; q=p.nextNode; while(p!=head){// p q p k k =q.nextNode; q.nextNode = p; p.prevNode = q; p = q;//p没用了,把q给p q = k; } q.nextNode = p; p.prevNode = q; } public static void main(String[] args) throws Exception{ DoubleCircleLinkedList La = new DoubleCircleLinkedList (); Scanner in = new Scanner(System.in); int n = in.nextInt(),s; for(int i=0;i