研磨数据结构与算法-04链表

一,链表的节点

/*

* 链结点,相当于是车厢

*/

public class Node {

//数据域

public long data;

//指针域

public Node next;

public Node(long value) {

this.data = value;

}

/**

* 显示方法

*/

public void display() {

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

}

}

二,简单链表

/*

* 链表,相当于火车

*/

public class LinkList {

//头结点

private Node first;

public LinkList() {

first = null;

}

/**

* 插入一个结点,在头结点后进行插入

*/

public void insertFirst(long value) {

Node node = new Node(value);

node.next = first;

first = node;

}

/**

* 删除一个结点,在头结点后进行删除

*/

public Node deleteFirst() {

Node tmp = first;

first = tmp.next;

return tmp;

}

/**

* 显示方法

*/

public void display() {

Node current = first;

while(current != null) {

current.display();

current = current.next;

}

System.out.println();

}

/**

* 查找方法

*/

public Node find(long value) {

Node current = first;

while(current.data != value) {

if(current.next == null) {

return null;

}

current = current.next;

}

return current;

}

/**

* 删除方法,根据数据域来进行删除

*/

public Node delete(long value) {

Node current = first;

Node previous = first;

while(current.data != value) {

if(current.next == null) {

return null;

}

previous = current;

current = current.next;

}

if(current == first) {

first = first.next;

} else {

previous.next = current.next;

}

return current;

}

}

测试:

public class TestLinkList {

public static void main(String[] args) {

LinkList linkList = new LinkList();

linkList.insertFirst(34);

linkList.insertFirst(23);

linkList.insertFirst(12);

linkList.insertFirst(0);

linkList.insertFirst(-1);

// linkList.display();

//

// linkList.deleteFirst();

// linkList.display();

//

// Node node = linkList.find(23);

// node.display();

Node node1 = linkList.delete(0);

node1.display();

System.out.println();

linkList.display();

}

}

时间: 2024-08-08 01:26:23

研磨数据结构与算法-04链表的相关文章

Java数据结构和算法之链表

三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中都包含一个对下一个点引用的字段(通常叫做next)但是本身的对象中有一个字段指向对第一个链结点的引用. 单链表 用一组地址任意的存储单元存放线性表中的数据元素. 以元素(数据元素的映象)  + 指针(指示后继元素存储位置)  = 结点(表示数据元素 或 数据元素的映象) 以"结点的序列&q

数据结构与算法-单向链表

概述 由于最近在工作中需要用到树形结构来解决一些问题,所以萌生了系统学习“数据结构和算法”的想法,于是乎从最简单的表结构开始.由于数组是最简单的表结构的实现,也是各个编程语言内置的数据类型,所以不做更多的记录.表结构中以下实现打算学习: LinkedList Stack Queue HashTable Dictionary 本篇为学习数据结构的第一篇随笔,从最简单的单向链表开始吧. 实现(C#) 平台:dotNet Core 1.0, C# IDE:VSCode 如果考虑算法复用的话,可以实现泛

研磨数据结构与算法-02双端链表与双向链表

Node节点: /* * 链结点,相当于是车厢 */ public class Node { //数据域 public long data; //指针域 public Node next; public Node previous; public Node(long value) { this.data = value; } /** * 显示方法 */ public void display() { System.out.print(data + " "); } } 双端链表: /*

数据结构与算法(三)--链表

一.链表 单项链表.循环链表.双向链表 链表和数组不同,链表的每个元素都存储了下一个元素的地址,所以链表不需要连续的存储空间: 如果我们申请一个 100MB 大小的数组,当内存中没有连续的.足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败. 1.单链表:内存块称为链表的"结点",把这个记录下个结点地址的指针叫作后继指针 next 头结点用来记录链表的基地址.有了它,我们就可以遍历得到整条链表.而尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址

数据结构与算法04 之二叉树

在有序数组中,可以快速找到特定的值,但是想在有序数组中插入一个新的数据项,就必须首先找出新数据项插入的位置,然后将比新数据项大的数据项向后移动一位,来给新的数据项腾出空间,删除同理,这样移动很费时.显而易见,如果要做很多的插入和删除操作和删除操作,就不该选用有序数组. 另一方面,链表中可以快速添加和删除某个数据项,但是在链表中查找数据项可不容易,必须从头开始访问链表的每一个数据项,直到找到该数据项为止,这个过程很慢. 树这种数据结构,既能像链表那样快速的插入和删除,又能想有序数组那样快速查找.这

数据结构与算法三(链表)

一.链表 1.什么是链表 和数组一样,链表也是一种线性表 从内存结构上看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构 链表中的每一个内存块被称为节点Node,节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next 2.常见的缓存策略 先进先出策略FIFO (First In,First Out) 最少使用策略LFU (Least Frequently Used) 最近最小使用策略LRU(Least Recently Used) 3.常

数据结构和算法--3链表(单向链表、双向链表、环形单向链表和约瑟夫问题)

链表 链表是以节点的方式来存储 每个节点包含data域和next域,指向下一个节点 链表的各个节点不一定是连续存储 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 单向列表 最大特点是可以将物理地址上不连续的数据连接起来,通过指针来对物理地址进行操作,实现增删改查等功能. 单链表分为两种:有头链表和无头链表. 有头节点的增删改查 定义一个单链表的类: //定义一个SingleLinkedList,单链表,管理HeroNode class SingleLinkedList{ //初始

数据结构与算法之链表

链表的分类: (1)单链表 头插法:只需要维护一个头结点即可,常用来模拟堆栈: 尾插法:需要维护头结点和尾结点,常用来模拟队列. (2)双向链表 双向遍历,可以用来保存网页的历史记录等: (3)循环链表 经常出现在面试题中,判断链表是否有环. 链表的删除 方式一:维护两个指针,current(表示当前节点)和previous(表示当前节点的前一个节点).当current遍历到要删除的元素时,执行previous->next = current->next,并删除current.在删除时,需要判

数据结构和算法-008 链表

链表,要简单讲一讲. 链(Link)一般有两个部分,一是节点(node)和指针(point) Node:存放内容(content) Point:指向下一个节点,把节点穿起来,就形成链表 看代码, 这个的link其实是一个节点(Node),link穿起来就是一张链表(LinkedList) 实现一下功能 创建链表 在链表头部添加一个节点 删除头部节点 查找一个节点 删除指点节点 public class Link {          public String bookName;     pub