Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 单向链表学习

Java 单向链表学习

作者头像
Mirror王宇阳
发布于 2020-11-10 15:04:37
发布于 2020-11-10 15:04:37
94500
代码可运行
举报
运行总次数:0
代码可运行

Java 单向链表学习

链表等同于动态的数组;可以不同设定固定的空间,根据需要的内容动态的改变链表的占用空间和动态的数组同一形式;链表的使用可以更加便于操作。

链表的基本结构包括:链表工具类和节点类,节点类是工具类的内部类,这样可以便于Link和Node类之间的属性调用和方法使用,也有效的封装了Node类不被外部所使用;

Link类主要负责处理外部类和Node类之间的关系以及链表内容的存储;Node类负责具体的链表结构的操作,比如:添加链表时需要将新的链表放在上一个链表的后面则需要Link调用Node类进行链表结构的定义,同理:大多链表结构的操作都有Node负责具体的操作和定义,而Link类主要负责外部类和Node类的关系。

链表结构中:root负责记录链表首结构的地址,next负责记录当前链表节点的下一个链表节点的地址,data则是记录具体的数据类型的数据信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Link {        //链表类(外部可调用的一个工具类)

         class Node {  //节点类,定义该内部类,只可服务于Link类

                   private String data ;         //节点数据

                   private Node next ;           //引用关系(顺序)

                   public Node(String data) {

                            this.data = data ;

                   }

 

                   public void addNode(Node newNode){

                            if ( this.next == null){        //下一个节点为空则设置下一个节点

                                     this.next = newNode ;

                            } else {      //若节点存在,则向后移

                                     this.next.addNode(newNode) ;

                            }

                   }

                  

                   public boolean containsNode(String data) {   

                            //(如果比较的数据是对象,则定义一个对象比较的方法。)

                            if ( data.equals(this.data)) {     //对比data

                                     return true ;

                            } else {

                                     if ( this.next != null ) {       // 对比下一个data

                                               return this.next.containsNode(data) ;

                                     } else {

                                               return false ;

                                     }

                            }

                   }

 

                   public String getNode(int index) { //索引查找

                            // 1 比较index和foot的值是否相等

                            // 2 将foot的内容自增 1

                            if ( Link.this.foot ++ == index) {         //对比当前节点的foot

                                     return this.data ;

                            } else {      //下一个节点

                                     return this.next.getNode(index) ;

                            }

                   }

 

                   public void setNode(int index , String data) {

                            if ( Link.this.foot ++ == index ) {

                                     this.data = data ;     //内容修改(替换     )

                            } else {

                                     if ( this.next != null ) {

                                               this.next.setNode(index,data) ;

                                     }

                            }

                   }

 

                   // 要传递上一个节点以要删除的数据

                   public void removeNode( Node previous , String data ) {

                            if ( data.equals(this.data)){//数据满足删除条件

                                     previous.next = this.next ; //上一个节点的next指向当前的next(空出当前节点)

                            } else {      // 继续匹配查询删除

                                     if(this.next != null) {

                                               this.next.removeNode(this , data) ;//this表示当前对象,将this给previous

                                                        // 因为previous接收的是上一个对象。

                                     }

                            }

                   }

 

                   public void toArrayNode() {

                            Link.this.retArray[Link.this.foot ++] = this.data ;

                            if ( this.next != null ) {

                                     this.next.toArrayNode() ;

                            }

                   }

                  

         }

 

         /* ========================================================================== */

 

         private Node root ;  //根节点

         private int count = 0 ; //保存元素的个数

         private int foot = 0 ; //保存链表的索引编号

         private String [] retArray ; //对象数组

 

         public void add(String data) { //数据添加

                   Node newNode = new Node(data) ;

                   if ( this.root == null ){//无根节点,保存根节点

                            this.root = newNode ;

                   } else {      //向Node调用

                            this.root.addNode(newNode) ;

                   }

                   this.count ++ ; //每一个保存后数据量自加 1

         }

 

         public int size() {       //判断返回链表数据数量

                   return this.count ;

         }

 

         public boolean isEmpty() {        //判断链表是否为空

                   return this.count == 0 ;   // 根据链表数量判断

         }

 

         public boolean contains(String data) { //查询数据是否存在

                   if ( data == null || this.root == null ) {       //查找数据为空则false

                            return false ;

                   }

                   return this.root.containsNode(data) ;    //不为空则调用Node查找数据;

         }

 

         public String get(int index) {     //设置索引目标 index

                   if ( index > this.count ) {

                            return null ;

                   }

                            this.foot = 0 ;   //索引归零,表示从左往右查找

                            return this.root.getNode(index) ;   //调用getNode()查找

         }

 

         public void set(int index , String data) {//修改链表数据内容

                   if ( data == null || this.root == null ) {

                            return ;

                   }

                   this.foot = 0 ;   // 重置foot,便于查找内容

                   this.root.setNode(index,data) ;       //调用Node修改

         }

        

         /*

                   如果要删除的是根节点:root指向下一个节点即可

                   如果删除的不是根节点:删除的前一个节点,下一个节点指向删除的下一个节点

                   删除数据的形式:当前节点的上一个节点next = 当前节点的next

 

                   需要设置一个方法专门处理非根节点的删除(removeNode()方法)

         */

         public void remove(String data) {

                   if ( this.contains(data)) {//contains() 判断数据是否存在

                            // 判断删除的数据是不是根节点数据

                            // root是Node类的对象,此处直接访问了Node对象的私有属性 data

                            if ( data.equals(this.root.data)) {

                                     this.root = this.root.next ;       //空出当前节点(改变根节点)

                            } else {

                                     this.root.next.removeNode(this.root , data) ;

                            }

                            this.count -- ;   //链表个数减一

                   }

         }

          

         //      首先开辟一个数组空间,空间 == count

 

         public String [] toArray() { //将链表以对象数组形式返回

                   if (this.root == null ) {

                            return null ;

                   }

                   this.foot = 0 ; //下标控制

                   this.retArray = new String [this.count] ; //开辟一个数组

                   this.root.toArrayNode() ; //Node处理

 

                   return retArray ;

                  

         }

}

 

public class LinkDemo { //基本程序框架

         public static void main(String args[]) {

                   // 测试数据

                   Link all = new Link();

                   // 添加数据

                   all.add("Hello") ;

                   all.add("World") ;

                   all.add("Mirror") ;

                   all.add("2019/4/17") ;

                   all.add( "null" ) ;

                   // 获得链表长度(数据量)

                   System.out.println(all.size()) ;

                   // 判断链表是否为NULL

                   System.out.println(all.isEmpty()) ;

                   // 根据内容查找数据是否存在

                   System.out.println(all.contains("Hello")) ;

                   System.out.println(all.contains("yang")) ;

                   // 根据索引foot输出链表内容(索引foot是动态的)

                   //某种程度上链表就是动态的数组

                   System.out.println(all.get(1)) ;

                   //System.out.println(all.get(5)) ;

                   // 修改链表内容

                   all.set(1,"yang");

                   System.out.println(all.get(1)) ;

                   //数据删除

                   all.remove("yang") ;

                   System.out.println(all.contains("yang")) ;

                  

                   System.out.println("====================") ;

                   //对象数组转换

                   String [] data = all.toArray() ;

                   for ( int x = 0 ; x <= data.length-1 ; x++ ) {

                            System.out.print("\t" + data[x]) ;

                   }

 

         }

}

链表最好的使用就是横向替代对象数组;可以将存入的数据按照链表存储(顺序方法)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Book {

         private String title ;

         private double price ;

         public Book(String title , double price) {

                   this.title = title ;

                   this.price = price ;

         }

 

         public String getInfo() {

                   return "图书名称:" + this.title + ", 价格:" + this.price ;

         }

 

         public boolean compare(Book book) {

                   if ( this == book ) {

                            return true ;

                   }

                   if ( book == null ) {

                            return false ;

                   }

                   if ( this.title.equals(book.title) && this.price == book.price ) {

                            return true ;

                   }

                   return false ;

         }

}

 

class Link {

         class Node {

                   private Book data ;

                   private Node next ;

                   public Node( Book data ) {

                            this.data = data ;

                   }

 

                   public void addNode( Node newNode ) {

                            if ( this.next == null ) {

                                     this.next = newNode ;

                            } else {

                                     this.next.addNode(newNode) ;

                            }

                   }

 

                   public boolean containsNode( Book data ) {

                            if ( data.compare(this.data) ) {

                                     return true ;

                            } else {

                                     if ( this.next != null) {

                                               return this.next.containsNode(data) ;

                                     } else {

                                               return false ;

                                     }

                            }

                   }

 

                   public Book getNode(int index) {

                            if ( Link.this.foot ++ == index ) {

                                     return this.data ;

                            } else {

                                     return this.next.getNode(index) ;

                            }

                   }

 

                   public void setNode(int index , Book data) {

                            if ( Link.this.foot ++ == index ) {

                                     this.data = data ;

                            } else {

                                     if ( this.next != null) {

                                     this.next.setNode(index,data) ;

                                     }

                            }

                   }

 

                   public void removeNode(Node previous,Book data) {

                            if ( data.compare(this.data)) {

                                     previous.next = this.next ;

                            } else {

                                     if ( this.next != null) {

                                               this.next.removeNode(this,data) ;

                                     }

                            }

                   }

 

                   public void toArrayNode() {

                            Link.this.retArray[Link.this.foot ++] = this.data ;

                            if (this.next != null){

                                     this.next.toArrayNode() ;

                            }

                   }

         }

 

         private Node root ;

         private int count = 0  ;

         private int foot = 0 ;

         private Book [] retArray ;

 

         public void add(Book data) {

                   Node newNode = new Node(data) ;

                   if ( root == null ) {

                            root = newNode ;

                   } else {

                            this.root.addNode(newNode) ;

                   }

                   this.count ++ ;

         }

 

         public int size() {

                   return count ;

         }

 

         public boolean isEmpty() {

                   return this.count == 0 ;

         }

 

         public boolean contains( Book data ) {

                   if ( data.compare(root.data) ) {

                            return true ;

                   } else {

                            return this.root.containsNode(data) ;

                 }

         }

 

         public Book get(int index) {

                   if (index > count) {

                            return null;

                   }

                   this.foot = 0 ;

                   return this.root.getNode(index) ;

         }

 

         public void set(int index,Book data) {

                   if ( index > count ) {

                            return ;

                   }

                   this.foot = 0 ;

                   this.root.setNode(index,data) ;

         }

 

         public void remove(Book data) {

                   if ( data.compare(root.data) ) {

                            root = root.next ;

                   } else {

                            this.root.removeNode(this.root,data) ;

                   }

                   count -- ;

         }

 

         public Book [] toArray() {

                  

                   this.foot = 0 ;

                   this.retArray = new Book [this.count] ;

                   this.root.toArrayNode() ;

 

                   return retArray ;

         }

}

 

public class LinkBook {

         public static void main(String [] args) {

                   Link all = new Link() ;

                   all.add(new Book("Java开发",89.9)) ;

                   all.add(new Book("JSP开发",78.9)) ;

                   all.add(new Book("Web开发",68.9)) ;

 

                   System.out.println(all.size());

 

                   System.out.println(all.contains(new Book("Java开发",89.9)));

 

                   Book [] books = all.toArray() ;

                   for ( int x = 0 ; x < books.length ; x ++ ) {

                            System.out.println(books[x].getInfo()) ;

                   }

         }

}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Province {         //每一个类就相当于数据库中的一个表;

         private int pid ;

         private String name ;

         private Link cities = new Link() ;  //一对多

 

         //setter getter 无参构造 略~

 

         public Province(int pid , String name) {

                   this.pid = pid ;

                   this.name = name ;

         }

 

         public Link getCities() {

                   return this.cities ;

         }

 

         public String getInfo() {

                   return "省份编号:" + this.pid + ", 名称:" + this.name ;

         }

}

 

class City {

         private int cid ;

         private String name ;

         private Province province ; //省份对象元素

 

         public City(int cid , String name) {

                   this.cid = cid ;

                   this.name = name ;

         }

 

         public boolean compare(City data) {

                   if ( this == data ) {

                            return true ;

                   }

                   if ( data == null) {

                            return false ;

                   }

                   if ( this.cid == data.cid && this.name.equals(data.name)) {

                            return true ;

                   }

                   return false ;

         }

 

         public void setProvince(Province province) {

                   this.province = province ;

         }

 

         public Province getProvince() {

                   return this.province;

         }

 

         public String getInfo() {

                   return "城市编号:" + this.cid + ", 名称:" + this.name ;

         }

}

/*

         每一个实例化的对象都是单独的个体的存在,占用的是独立的内存空间

         所以每一个实例对象的操作不影响其它实例对象或者类的数据

*/

 

class Link {

         class Node {

                   private City data ;

                   private Node next ;

 

                   public Node(City data) {

                            this.data = data;

                   }

 

                   public void addNode(Node newNode) {

                            if ( this.next == null ) {

                                     this.next = newNode ;

                            } else {

                                     this.next.addNode(newNode) ;

                            }

                   }

 

                   public boolean containsNode(City data) {

                            if ( data.compare(this.data)) {

                                     return true ;

                            } else {

                                     if ( this.next != null ){

                                               return this.next.containsNode(data) ;

                                     } else {

                                               return false ;

                                     }

                            }

                   }

 

                   public City getNode(int index) {

                            if ( Link.this.foot ++ == index ) {

                                     return this.data ;

                            } else {

                                     return this.next.getNode(index) ;

                            }

                   }

 

                   public void setNode(int index , City data) {

                            if ( Link.this.foot ++ == index ) {

                                     this.data = data ;

                            } else {

                                     this.next.setNode(index , data) ;

                            }

                   }

 

                   public void removeNode(Node previous , City data) {

                            if ( data.compare(this.data)){

                                     previous.next = this.next ; //空掉当前(this)的节点

                            } else {

                                     if ( this.next != null ) {

                                               this.next.removeNode(this,data) ;

                                     }

                            }

                   }

 

                   public void toArrayNode() {

                            Link.this.cityArray[Link.this.foot ++ ] = this.data ;

                            if ( this.next != null ) {

                                     this.next.toArrayNode() ;

                            }

                   }

         }

 

         private Node root ;

         private int count = 0 ;

         private int foot = 0 ;

         private City [] cityArray ;

 

         public void add(City data) {

                   Node newNode = new Node(data) ;

                   if ( this.root == null )         {

                            this.root = newNode ;

                   } else {

                            this.root.addNode(newNode) ;

                   }

                   this.count ++ ;

         }

 

         public int size() {

                   return this.count ;

         }

 

         public boolean isEmpty() {

                   return count == 0 ;

         }

 

         public boolean contains(City data) {

                   if ( data.compare(this.root.data) ) {         //**--

                            return true ;

                   } else {

                            return this.root.containsNode(data) ;

                   }

         }

 

         public City get(int index) {

                   if ( index > count ){

                            return null;

                   }

                   this.foot = 0 ;

                   return this.root.getNode(index) ;

         }

 

         public void set(int index , City data) {

                   if ( index > count ){

                            return ;

                   }

                   this.foot = 0 ;

                   this.root.setNode(index , data) ;

         }

 

         public void remove(City data) {

                   if ( data.compare(this.root.data) ) {

                            this.root = this.root.next ;

                   }

                   this.root.removeNode(this.root , data) ;

 

        this.count -- ;

         }

 

         public City [] toArray() {

                   if ( this.root == null ) {

                            return null ;

                   }

                   this.foot = 0 ;

 

                   this.cityArray= new City[this.count] ;

 

                   this.root.toArrayNode() ;

 

                   return cityArray ;

         }

}

 

public class LinkPC {

         public static void main(String args[]) {

                   // 设置关系数据

                   Province pro = new Province(1,"江苏省") ; // 声明Province类对象

                   City c1 = new City(1001,"南京市") ;

                   City c2 = new City(1002,"苏州市") ;

                   City c3 = new City(1003,"宿迁市") ; // 什么多个City类对象

 

                   //设置关系

                   c1.setProvince(pro) ;        // 利用City实例对象c1调用setProvince()方法并将pro对象传递

                   c2.setProvince(pro) ;        // 这就是所谓的 "引用传递"

                   c3.setProvince(pro) ;

                  

                   pro.getCities().add(c1) ;

                   pro.getCities().add(c2) ;

                   pro.getCities().add(c3) ;

 

                   System.out.println(pro.getInfo());

                   System.out.println(pro.getCities().size()) ;

 

                   City [] ci = pro.getCities().toArray() ;

                   for ( int x = 0 ; x < ci.length ; x ++ ) {

                            System.out.println(ci[x].getInfo()) ;

                   }       

         }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 实践
/** *宠物就是一个标准,包含多类宠物 *定义宠物标准接口Pet *定义Cat和Dog两个Pet接口的子类 *使用链表结构动态存储宠物信息 *定义商店类(工厂类),负责宠物的上架(链表添加)、下架(链表删除)、查找(模糊查找) * *所有数据类型均为 接口————Pet * * */ class Link { //链表类(外部可调用) class Node { //节点类,定义该内部类,只可服务于Link类
Mirror王宇阳
2020/11/10
4050
Java Object类
Object时所有类的父类,任何一个类在定义的时候没有明确的继承一个父类,那么它就是object类的子类;即:class Book {} == class Book extends Object {} 定义作用是一样的。
Mirror王宇阳
2020/11/10
6260
Java链表的基本使用
链表是一种根据元素节点逻辑关系排列起来的一种数据结构。利用链表可以保存多个数据,这一点类似于数组的概念,但是数组本身有一个缺点—— 数组的长度固定,不可改变,在长度固定的情况下首选的肯定是数组,但是在现实的开发之中往往要保存的内容长度是不确定的,那么此时就可以利用链表这样的结构来代替数组的使用。
全栈程序员站长
2022/08/18
4960
数据结构——单链表的代码实现(Java)
上接 数据结构——线性表. 这篇文章 1、结点类: 单链表是由一个一个结点组成的,因此,要设计单链表类,必须先设计结点类。结点类的成员变量有两个:一个是数据元素,另一个是表示下一个结点的对象引用(即指针)。 步骤如下: (1)头结点的构造(设置指针域即可) (2)非头结点的构造 (3)获得当前结点的指针域 (4)获得当前结点数据域的值 (5)设置当前结点的指针域 (6)设置当前结点数据域的值 注:类似于get和set方法,成员变量是数据域和指针域。 代码实现: (1)List.java:(链表本身也是线性表,只不过物理存储上不连续)
向着百万年薪努力的小赵
2022/12/02
4740
数据结构——单链表的代码实现(Java)
Java单向链表实现
package com.pku.wuyu.io; class Link{ // 链表的完成类 class Node{ // 保存每一个节点,此处为了方便直接定义成内部类 private String data ; // 保存节点的内容 private Node next ; // 保存下一个节点 public Node(String data){ this.data = data ; // 通过构造方法设置节点内容 } public void add(Node newNod
葆宁
2019/04/18
1.2K0
Java单向链表实现
Java 比较器
比较器 Arrays 类 主要功能: 完成所有与数组有关的操作的工具类 二分查找: 在一个有序的数字序列中进行二分查找 public static int binarySearch(数据类型 [] a , 数据类型 key) 案例实现 public class TestDemo { public static void main(String [] args) throws ParseException { int date [] = new int [] {1,4,2,5,7,4,3,8} ;
Mirror王宇阳
2020/11/12
1.2K0
看得见的数据结构Android版之双链表篇
零、前言 1.上一篇分析了单链表,链表是一种数据结构,用来承载数据,每个表节点装载一个数据元素 2.双链表是每个节点除了数据元素外还分别持有前、后两个节点的引用 3.为了统一节点的操作,一般在真实链表的首尾各加一个虚拟节点,称为头节点和尾节点 4.如果说单链表是一列火车,那双链表就是一辆双头加固版火车,java中的LinkedList底层便是此结构 5.本例操作演示源码:希望你可以和我在Github一同见证:DS4Android的诞生与成长,欢迎star 1.留图镇楼:双链表的最终实现的操作效
张风捷特烈
2018/12/19
4723
02--图解数据结构之单链表实现集合
链表是一种线性的数据结构 是一种最简单的动态数据结构 优点: 动态创建,节省空间 头部添加容易 缺点:空间上不连续,查找困难。只能从头开始一个一个找 对于单链表: 链表
张风捷特烈
2018/09/29
3850
02--图解数据结构之单链表实现集合
03--图解数据结构之双链表实现容器
零、前言 链表是一种数据结构,用来承载数据,每个表节点装载一个数据元素 双链表是每个节点出来数据元素外还分别持有前、后两个节点的引用 为了统一节点的操作,一般在真实链表的首尾各加一个虚拟节点,称为头节
张风捷特烈
2018/09/29
6140
03--图解数据结构之双链表实现容器
看得见的数据结构Android版之单链表篇
零、前言 1.前面用数组实现了表结构,也分析了数组表的局限性(头部修改困难) 2.今天来讲另一种数据结构:单链表,它是一种最简单的动态数据结构 3.链表有点像火车,一节拴着一节,想要在某节后加一
张风捷特烈
2018/12/19
6440
Python 实现单向链表
单向链表 #!usr/bin/env python # -*- coding:utf-8 -*- """ @author:yzk13 @time: 2018/04/15 单向链表 """ class Node(object): """ 节点类 """ def __init__(self, value, next): self.value = value # 下一个节点 self.next = next clas
YingJoy_
2018/04/17
1.4K0
Java之手写LinkedList(下)
返回节点对象element在链表中首次出现的位置,如果链表中无此节点的对象则返回-1
用户5224393
2019/08/20
7820
JAVA-链表实例
PS:这样写,只是简单的实现某个数据类型的链表.在后面我们学习了JAVA-Object类,由于Object类是所有类的超类,所以,我们可以来实现满足所有类型的链表
诺谦
2019/05/24
9270
Java实现单向链表
一、前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了。数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用~ 本文主要讲解单链表的基础知识点,做一个简单
Java3y
2018/04/02
2.6K0
Java实现单向链表
数据结构:这是一份全面& 详细的 线性表 学习指南
http://blog.csdn.net/chenleixing/article/details/42392283
Carson.Ho
2019/03/08
3110
数据结构:这是一份全面& 详细的 线性表 学习指南
Java单向链表
class Node{ // 定义节点类 private String data ; // 保存节点内容 private Node next ; // 表示保存下一个节点 public Node(String data){ // 通过构造设置节点内容 this.data = data ; // 设置内容 } public void setNext(Node next){ this.next = next ; // 设置下一个节点 } public Node getNext(){ // 取得下一个节点 return this.next ; } public String getData(){ return this.data ; // 取得节点的内容 } }; public class LinkDemo01{ public static void main(String args[]){ Node root = new Node(“火车头”) ; // 定义根节点 Node n1 = new Node(“车厢-A”) ; // 定义第一个车厢(第一个节点) Node n2 = new Node(“车厢-B”) ; // 定义第二个车厢(第二个节点) Node n3 = new Node(“车厢-C”) ; // 定义第三个车厢(第三个节点) root.setNext(n1) ; // 设置火车头的下一个节点是第一个车厢A n1.setNext(n2) ; // 设置第一个车厢的下一个节点是第二个车厢 n2.setNext(n3) ; // 设置第二个车厢的下一个节点是第三个车厢 printNode(root) ; // 从头开始输出 } public static void printNode(Node node){ // 输出节点 System.out.print(node.getData() + “\t”) ; // 输出节点的内容 if(node.getNext()!=null){ // 判断此节点是否存在下一个节点 printNode(node.getNext()) ; // 向下继续输出 } } };
葆宁
2019/04/18
7250
Java之手写LinkedList改造
改造Iterator /** * 返回在此列表中的元素上进行迭代的迭代器(按适当顺序)。 * 此实现仅返回列表的一个列表迭代器。 * @return */ public Iterator<T> iterator() { /** * 这里我们回顾一下匿名内部类 */ return new Iterator<T>() { /** * 第一次记录first节点 */ private
用户5224393
2019/08/20
3980
常见数据结构和Javascript实现总结
做前端的同学不少都是自学成才或者半路出家,计算机基础的知识比较薄弱,尤其是数据结构和算法这块,所以今天整理了一下常见的数据结构和对应的Javascript的实现,希望能帮助大家完善这方面的知识体系。
MudOnTire
2019/08/09
5680
常见数据结构和Javascript实现总结
数据结构---单向链表
如果我频繁的在头部或中间插入数据,此时选择链表。但频繁使用下标操作时,就选择数组。
用户4793865
2023/01/12
6800
数据结构---单向链表
JavaScript 数据结构之链表,这一篇就够了
上一篇博客发布以后,仅几天的时间竟然成为了我写博客以来点赞数最多的一篇博客。欢喜之余,不由得思考背后的原因,前端er离数据结构与算法太遥远了,论坛里也少有人去专门为数据结构与算法撰文,才使得这看似平平的文章收获如此。不过,这样也更加坚定了我继续学习数据结构与算法的决心(虽然只是入门级的)
桃翁
2019/05/31
5750
相关推荐
Java 实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档