链表的java_java什么是链表

LinkedList使用了循环双向链表数据结构。与基于数组ArrayList相比,这是两种截然不同的实现技术,这也决定了它们将适用于完全不同的工作场景。

8fbc09314cd5f32d0e73daddecaac9f5.png

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。

实例:package com.ys.link;

public class DoublePointLinkedList {

private Node head;//头节点

private Node tail;//尾节点

private int size;//节点的个数

private class Node{

private Object data;

private Node next;

public Node(Object data){

this.data = data;

}

}

public DoublePointLinkedList(){

size = 0;

head = null;

tail = null;

}

//链表头新增节点

public void addHead(Object data){

Node node = new Node(data);

if(size == 0){//如果链表为空,那么头节点和尾节点都是该新增节点

head = node;

tail = node;

size++;

}else{

node.next = head;

head = node;

size++;

}

}

//链表尾新增节点

public void addTail(Object data){

Node node = new Node(data);

if(size == 0){//如果链表为空,那么头节点和尾节点都是该新增节点

head = node;

tail = node;

size++;

}else{

tail.next = node;

tail = node;

size++;

}

}

//删除头部节点,成功返回true,失败返回false

public boolean deleteHead(){

if(size == 0){//当前链表节点数为0

return false;

}

if(head.next == null){//当前链表节点数为1

head = null;

tail = null;

}else{

head = head.next;

}

size--;

return true;

}

//判断是否为空

public boolean isEmpty(){

return (size ==0);

}

//获得链表的节点个数

public int getSize(){

return size;

}

//显示节点信息

public void display(){

if(size >0){

Node node = head;

int tempSize = size;

if(tempSize == 1){//当前链表只有一个节点

System.out.println("["+node.data+"]");

return;

}

while(tempSize>0){

if(node.equals(head)){

System.out.print("["+node.data+"->");

}else if(node.next == null){

System.out.print(node.data+"]");

}else{

System.out.print(node.data+"->");

}

node = node.next;

tempSize--;

}

System.out.println();

}else{//如果链表一个节点都没有,直接打印[]

System.out.println("[]");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值