zoukankan      html  css  js  c++  java
  • midStack

    public class MidStack<T> {
    	static class Node<T>{
    		T val;
    		Node<T> next = null;
    		Node<T> pre = null;
    		public Node(T val){
    			this.val = val;
    		}
    	}
    	private int size = 0;
    	private Node<T> head = null;
    	private Node<T> tail = null;
    	private Node<T> mid = null;
    	
    	public T pop() {
    		if (tail == null) {
    			return null;
    		}
    		Node<T> temp = tail;
    		if (tail == head) {
    			tail = null;
    			head = null;
    			mid = null;
    		} else {
    			tail.pre.next = null;
    			if (size % 2 != 0) {
    				mid = mid.pre;
    			}
    			tail = tail.pre;
    		}
    		size--;
    		return temp.val;
    	}
    	
    	public void push(T val) {
    		Node<T> newNode = new Node<>(val);
    		if (head == null) {
    			head = newNode;
    			tail = newNode;
    			mid = newNode;
    		} else {
    			tail.next = newNode;
    			newNode.pre = tail;
    			tail = newNode;
    			if (size % 2 == 0) {
    				mid = mid.next;
    			}
    		}
    		size++;
    	}
    	
    	public T peekMid() {
    		if (mid == null) {
    			return null;
    		}
    		return mid.val;
    	}
    	
    	public T popMid() {
         if(size == 0) {
           return null;
         }
         if (size == 2) {
           T temp = mid.val;
           head = tail;
           mid = tail;
           size--;
           return temp;
         }
    
    		if (size == 1) {
    		    T temp = mid.val;
    		    mid = head = tail = null;
           size--;
        		    return temp;
    		}
    		mid.pre.next = mid.next;
    		mid.next.pre = mid.pre;
    		if (size % 2 == 0) {
    			mid = mid.next;
    		} else {
    			mid = mid.pre;
    		}
    		size--;
    		return mid.val;
    	}
    	
    	public String toString() {
    		if (head == null) {
    			return "";
    		}
    		Node<T> cur = head;
    		StringBuilder sb = new StringBuilder();
    		while (cur != null) {
    			sb.append(cur.val).append(',');
    			cur = cur.next;
    		}
    		sb.deleteCharAt(sb.length() - 1);
    		return sb.toString();
    	}
    	
    	public static void main(String[] args) {
    		MidStack<Integer> ms = new MidStack<>();
    		ms.push(1);
    		ms.push(2);
    		ms.push(3);
    		ms.pop();
    		ms.pop();
    		System.out.println("stack: " + ms);
    		System.out.println("mid: " + ms.peekMid());
    		ms.popMid();
    		System.out.println("stack: " + ms);
    		System.out.println("mid: " + ms.peekMid());
    	}
    }
    

      

      

  • 相关阅读:
    css样式初始化代码总结
    linux LVM逻辑卷的创建,扩容,缩减和删除
    MAC Jenkins安装 + Xcode + 蒲公英 + Testflight
    Linux rsyslog工具
    linux 中 Vi 和 Vim 的使用
    Zabbix实战--监控Nginx、MySQL与VM esxi主机、vSphere Client、JAVA应用
    Linux下netstat命令详解
    Debian 10上使用UFW设置防火墙
    开源网络安全检测工具——伏羲 Fuxi-Scanner
    CentOS8的web终端-cockpit,通过Cockpit管理KVM虚拟机
  • 原文地址:https://www.cnblogs.com/apanda009/p/7958860.html
Copyright © 2011-2022 走看看