java实现带头结点的单链表的插入、删除、求长度

本文介绍了如何根据AQS(AbstractQueuedSynchronizer)的思想,实现一个带头结点的单链表,包括插入、删除和计算长度的功能。文章起源于作者在知乎面试中遇到的题目,原本的解决方案并非面向对象,后来尝试将其转换为面向对象的设计,虽然面试未完成,但作者分享了仿照AQS实现链表的代码。
摘要由CSDN通过智能技术生成

前段时间知乎面试,面试官出了一道题目实现单链表的插入、删除、计算长度,当时勉强写出来了,但是不是用的面向对象的思路写的,面试官叫我改成面向对象的方式。当时突然想到AQS的底层实现方式,就想仿照改一下。结果面试官说时间原因,就不写了。。。。。

AQS里面有一个头结点head和一个尾节点tail,刚开始head和tail都是没有初始化的,后面第一个进入阻塞对的第一个节点会在enq方法中初始化head,AQS中阻塞队列是不算head节点,head节点可以理解为当前拥有锁的节点。想了解更多的可以去看看AQS和ReentrantLock的源码。

思想我们也可以借鉴AQS,实现一个带头结点的单链表(注意头结点是不算在链表中),具体的代码如下:

package cn.cqupt.linked;

class Node {
	int data;
	Node next;

	Node() {
	}

	Node(int data) {
		this.data = data;
		this.next = null;
	}
}

public class LinkedOp {
	// 头结点
	private  Node head;
	// 链表的长度
	private  int size;
	
	// 构造函数初始化头结点,也可以在插入第一个节点的时候初始化
	LinkedOp(){
		head = new Node();
	}
	// 头插法
	public void insertFromHead(int data){
		// 将data封装为Node节点
		Node node = new Node(data);
		// 如果链表为空,直接跟在head后面
		i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值