当前位置 : 主页 > 编程语言 > java >

双向循环链表基本操作

来源:互联网 收集:自由互联 发布时间:2021-06-28
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
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(){ 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(index
            
             index;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
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
        
       
      
     
    
   
  
 
网友评论