美文网首页
链表的概念和用法

链表的概念和用法

作者: xiao_xie_shen | 来源:发表于2019-03-25 17:01 被阅读0次

链表概念

链表是一种动态的数据结构。跟数组比较,链表的优势是分配内存空间的灵活性,数组的内存却是一块连续的内存。

  1. 插入数据来比较

数组插入数据需要插入位置后面的所有元素往后移,消耗大,

而链表的话是将上一个节点的next指向新节点,然后新节点的next指向上一个节点原本指向的节点。

  1. 查找数据比较

数组可以直接索引定位

链表需要遍历查找

链表中的节点分为两个部分,一个element代表当前节点数据,一个next代表指向的下一节点。

链表示例

一个可以使用的链表,大概的方法结构如下

function newNode(){ }     //新建节点方法
function findNode(){ }    //查找节点方法
function insertNode(){ }  //插入节点方法
function removeNode(){ }  //删除节点方法
function logNode(){ }     //显示节点方法

那么写一个示例

function NewNode(element){
    this.element = element;
    this.next = null;
}

function LinkedList(){
    this.head = new NewNode('head');

    this.findNode = findNode;
    this.insertNode = insertNode;
    this.removeNode = removeNode;
    this.logNode = logNode;
}

/** 查找节点 */
function findNode (item) {
    var curNode = this.head;
    while (curNode.element != item){  //循环链表查找,找不到返回null
        curNode = curNode.next;
    }
    return curNode;
};

/**
 * 插入节点
 * @param newElement 新节点数据
 * @param posItem 插入该节点后面位置
 */
function insertNode (newElement,posItem) {
    var newNode = new NewNode(newElement);
    var posNode = this.findNode(posItem);
    newNode.next = posNode.next;
    posNode.next = newNode;
};

/**
 * 移除节点
 * 找到需要删除节点前一个节点,将next置为被删除节点的next
 */
function removeNode(removeItem){
    var curNode = this.head;
    while(!(curNode.next == null) && curNode.next.element != removeItem){
        curNode = curNode.next;
    }

    if(!(curNode.next == null)){
        curNode.next = curNode.next.next;
    }
}

/** 输出链表全部节点 */
function logNode(){
    var curNode = this.head;
    var listArr = [];
    while(curNode.next != null){
        listArr.push(curNode.next.element);
        curNode = curNode.next;
    }

    return listArr;
}

var list = new LinkedList();
list.insertNode('cont1' , 'head');
list.insertNode('cont2' , 'cont1');
list.insertNode('cont3' , 'cont2');

console.log(list.logNode());  //['cont1' , 'cont2' , 'cont3' ]

list.removeNode('cont2');

console.log(list.logNode());  //['cont1' , 'cont3' ]

参考链接

相关文章

  • 链表的概念和用法

    链表概念 链表是一种动态的数据结构。跟数组比较,链表的优势是分配内存空间的灵活性,数组的内存却是一块连续的内存。 ...

  • 算法&单链表反转(三)

    主要介绍链表的简单用法以及单链表反转。网上的实现有很多,使用 OC/C 来实现的没有几个。 一、链表的基本用法 链...

  • Java容器详情三(LinkedList)

    1. 俩表的概念链表的概念,链表是由一些列的非连续的节点组成的存储结构,简单分下类的话,链表又分为单向链表和双向链...

  • IOS开发_链表

    1、基础概念; 2、链表的定义; 3、链表的分类; 4、链表的特点; 1、基础概念; 1.1结点:链表中每...

  • Java-链表

    链表的概念 链表是由一系列非连续的节点组成的存储结构,简单分下类的话,链表又分为单向链表和双向链表,而单向/双向链...

  • Android handler 机制详解(doing)

    本文章基于AndroidAPI28,主要分析messageQueue 单链表实现的意义和用法、messageQue...

  • iOS面试算法基础(2)-链表

    本节我们一起来探讨用 Swift 如何实现链表以及链表相关的技巧。 基本概念 对于链表的概念,实在是基本概念太多,...

  • 数据结构基础--双向循环链表

    双向循环链表概念 双向循环链表,每个结点都有一个前驱prior和一个后继next,链表的的尾结点的后继指向头结点,...

  • 链表 - LinkedList

    基本概念 链表和数组类似,但相比于数组,链表有动态大小。而且插入和删除的效率很高,只要O(1)的时间。但是链表的遍...

  • 数据结构和算法之一——线性表_3_链式存储结构_3_双链表

    双向链表概念双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从...

网友评论

      本文标题:链表的概念和用法

      本文链接:https://www.haomeiwen.com/subject/ueebvqtx.html