LinkedList 仿源码

本文深入剖析了Java中LinkedList类的实现细节,包括其内部结构、核心方法以及使用示例,帮助开发者理解并掌握LinkedList的高效操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

 

 

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捐助),没钱捧个人场,谢谢各位。



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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值