Java数据结构与算法 - 链表

链表是继数组之后,使用的最广泛的通用存储结构,它也可以取代数组作为其他存储结构的基础例如栈,队列。常见链表包括单链表,双端链表,有序链表,双向链表。


1. 单链表

1.1 节点类

链表的数据都放在节点中,每个节点存放当前节点的数据(可能不止一种数据),以及对下一个节点的引用。对于Java而言,通常使用一个Link节点类来表示节点,类中通常包含:当前节点的数据变量,对下一个节点的引用next字段

class Link {
	public int iData;
	public double dData;
	public Link next;
	
	// 创建节点
	public Link(int id, double height) {
		iData = id;
		dData = height;
		next = null;
	}
}


1.2. 链表类

链表类唯一的数据成员就是:Node head - 头结点;实现的函数有:从头结点插入节点,从头结点删除节点,查找数据(返回节点),打印链表。

1.2.1 插入节点

单链表节点从头结点插入:将head所指节点赋给被插入节点.next;再将被插入节点赋给head。

// 从表头插入数据
public void insert(int age) {
	Node newNode = new Node(age);
	newNode.next = head;
	head = newNode;
}

1.2.2 删除节点

单链表从头结点删除节点:将head指向head.next。

// 从表头删除数据
public void delete() {
	head = head.next;
}

1.2.3 查找数据

注意引入一个temp节点 - current。

// 查找数据
public Node find(int number){
	Node current = head;
	
	while (current != null) {
		if (current.age == number) {
			return current;
		}
		current = current.next;
	}
	return null;
}

1.2.4 打印链表

// 打印链表
public void print() {
	Node current = head;
	while (current != null) {
		System.out.print(current.age + " ");
		current = current.next;
	}
	System.out.println("");
}


3. 双端链表

双端链表就是在单向链表的基础上,在class LinkList中多添加一个Node tail,表示尾节点。这样可以对整个链表首尾同时进行操作。

class LinkList {
	Node head;
	Node tail;
	
	// others function
}

4. 有序链表

链表中的数据是有序的。


5. 双向链表

单链表只能按照一个顺序遍历,无法反向遍历,双向链表可以逆向遍历。


6. 链表的优缺点

1)插入,删除速度快,因为插入删除不需要像链表那样移动数据。

2)链表容易扩展内存,而数组大小固定。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值