LinkedList 仿源码

简介:           package javacore; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年9月7日 下午12:31:13 des: */ public cl...

 

 

 

 

 

package javacore;

/**
 * @author baoyou E-mail:curiousby@163.com
 * @version 创建时间:2015年9月7日 下午12:31:13 des:
 */
public class LinkedList<E> {

	public static class Node<E> {
		public E obj;
		public Node<E> prev = null;
		public Node<E> next = null;

		Node(Node<E> prev, E element, Node<E> next) {
			this.obj = element;
			this.next = next;
			this.prev = prev;
		}
	}

	transient int size = 0;
	transient Node<E> first;
	transient Node<E> last;

	public void linkLast(E e) {
		final Node<E> l = last;
		final Node<E> newNode = new Node<>(l, e, null);
		last = newNode;
		if (l == null)
			first = newNode;
		else
			l.next = newNode;
		size++;
	}

	E unlink(Node<E> x) {
		final E element = x.obj;
		final Node<E> next = x.next;
		final Node<E> prev = x.prev;

		if (prev == null) {
			first = next;
		} else {
			prev.next = next;
			x.prev = null;
		}

		if (next == null) {
			last = prev;
		} else {
			next.prev = prev;
			x.next = null;
		}

		x.obj = null;
		size--;
		return element;
	}

	public boolean add(E e) {
		linkLast(e);
		return true;
	}

	public boolean remove(E e) {
		if (e == null) {
			for (Node<E> x = first; x != null; x = x.next) {
				if (x.obj == null) {
					unlink(x);
					return true;
				}
			}
		} else {
			for (Node<E> x = first; x != null; x = x.next) {
				if (e.equals(x.obj)) {
					unlink(x);
					return true;
				}
			}
		}
		return false;
	}

	public E getFirst() {
		return first.obj;
	}

	public E getLast() {
		return last.obj;
	}

	public static void main(String[] args) {
		LinkedList ll = new LinkedList<>();
		ll.add(1);
		ll.add(2);
		System.out.println(ll.getFirst() + " --- " + ll.getLast());
		ll.remove(2);
		System.out.println(ll.getFirst() + " --- " + ll.getLast()); 
	}

}

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

目录
相关文章
|
5月前
|
调度 uml 索引
|
存储
看一看LinkedList的源码?
看一看LinkedList的源码?
60 0
看一看ArrayList的源码?
看一看ArrayList的源码?
100 0
|
存储 Java
Java集合学习:LinkedList源码详解
Java集合学习:LinkedList源码详解
142 0
|
前端开发 Java 关系型数据库
题目: javaweb前端素材管理系统(附免费下载源码链接)
题目: javaweb前端素材管理系统(附免费下载源码链接)
115 0
题目: javaweb前端素材管理系统(附免费下载源码链接)
|
索引
LinkedList 基本使用
LinkedList 基本使用
134 0
LinkedList 基本使用
|
存储 安全 Java
【Java百炼成神】大魂师进阶篇——ArrayList、LinkedList、Vector、HashSet
【Java百炼成神】大魂师进阶篇——ArrayList、LinkedList、Vector、HashSet
281 0
【Java百炼成神】大魂师进阶篇——ArrayList、LinkedList、Vector、HashSet
|
前端开发 Java 容器
Java进阶:【集合】linkedlist的原理,手写linkedlist,源码阅读
Java进阶:【集合】linkedlist的原理,手写linkedlist,源码阅读
Java进阶:【集合】linkedlist的原理,手写linkedlist,源码阅读
|
算法 数据可视化
面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》
很多时候,你额外的能力才是自身价值的体现,不要以为你的能力就只是做个业务开发每天CRUD,并不是产品让你写CRUD,而是因为你的能力只能产品功能设计成CRUD。 就像数据结构、算法逻辑、源码技能,它都是可以为你的业务开发赋能的,也是写出更好、更易扩展程序的根基,所以学好这份知识非常有必要。 本文涉及了较多的代码和实践验证图稿
125 0
面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》