数据结构—双链表实现

public class doubleLinkedList {

	//节点类
	private static class Node{
		Object value;
		Node prev=this;
		Node next=this;
		Node(Object v){
			value=v;
		}
		public String toString() {
			return value.toString();
		}
	  }
		private Node head=new Node(null);//头节点
		private int size;//链表大小
		public void addAfter(Node newNode,Node node) {
			newNode.prev=node;
			newNode.next=node.next;
			newNode.prev.next=newNode;
			newNode.next.prev=newNode;
			size++;
		}
		public void addBefore(Node newNode,Node node) {
			newNode.prev=node.prev;
			newNode.next=node;
			newNode.prev.next=newNode;
			newNode.next.prev=newNode;
			size++;
		}
		//从表头往后添加
		public boolean addFirst(Object o) {
			addAfter(new Node(o), head);
			return true;
		}
		//从表头往前添加
		public boolean addLast(Object o) {
			addBefore(new Node(o), head);
			return true;
		}
		//
		public boolean add(Object o) {
			return addLast(o);
			
		}
		public boolean add(int index,Object o) {
			addAfter(new Node(o), getNode(index));
			return true;
		}
		public Node getNode(int index) {
			if(index<0||index>=size)
				throw new IndexOutOfBoundsException();
			Node node=head.next;
			for(int i=0;i<index;i++)
				node=node.next;
			return node;
		}
		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;
		}
		public boolean removeLast() {
			removeNode(head.prev);
			return true;
		}
		public int size() {
			return size;
		}
		public void removeNode(Node node) {
			node.prev.next=node.next;
			node.next.prev=node.prev;
			node.prev=null;
			node.next=null;
			size--;
		}
		public void printList() {
			for(int i=0;i<this.size();i++){
				System.out.println(getNode(i));
			}
		}
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
       doubleLinkedList dlist=new doubleLinkedList();
       dlist.add("1");
       dlist.add("2");
       dlist.add("3");
       dlist.printList();
       
       dlist.addFirst("0");
       dlist.addLast("5");
       dlist.printList();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值