javascript中在链表中向前(向后)移动n个节点
1.概念
在链表上移动n个节点,我第一眼看到这个需求的时候首先想到的是当前节点。使用这个当前节点作为参考来移动,没有这个当前节点的话是没有办法在链表上前进和后退的。初始化定义链表的时候定义一个当前节点,并且给这个当前节点赋值为头节点。向前移动的时候只需要使这个当前节点指向它下一个节点:this.currentNode = this.currentNode.next; 向后移动节点只需要使当前节点指向它前一个节点:this.currentNode = this.currentNode.next; 有了这个思路就好办了,剩下的只不过要使用循环控制移动n个节点就好了,当然向后移动的时候要判断是否到达链表末尾,向前移动的时候要判断是否到达链表头,如果是就停下来,这就说明这个需求有问题了。
还有显示当前节点的值,这个就非常容易了,只需要把这个节点的element打印出来就好了。
2.代码实现
/*** 实现在链表中向前移动n个节点和向后移动n个节点* * *///链表节点 function Node(element){this.element = element;this.next = null;this.previous = null; }//链表 function LList(){this.head = new Node('head');this.find = find;this.insert = insert;this.display = display;this.remove = remove;this.findLast = findLast;this.dispReverse = dispReverse;//当前节点就是头节点this.currentNode = this.head;//从链表开头向前移动n个节点this.advance = advance;//从链表某个节点向后回退n个节点this.back = back;//显示当前节点this.show = show; }//倒序输出链表中的所有节点 function dispReverse(){var currNode = this.head;currNode = this.findLast();while (!(currNode.previous == null)){document.write(currNode.element + ' ');currNode = currNode.previous;} }//找到最后一个节点 function findLast(){var currNode = this.head;while (!(currNode.next == null)){currNode = currNode.next;}return currNode; }//删除某一个节点 function remove(item){var currNode = this.find(item);if(!(currNode.next == null)){currNode.previous.next = currNode.next;currNode.next.previous = currNode.previous;currNode.next = null;currNode.previous = null;} }//打印所有链表节点 function display(){var currNode = this.head;while (!(currNode.next == null)){document.write(currNode.next.element + ' ');currNode = currNode.next;} }//找到某一个节点 function find(item){var currNode = this.head;while (currNode.element != item){currNode = currNode.next;}return currNode; }//插入某一个节点 function insert(newElement , item){var newNode = new Node(newElement);var current = this.find(item);newNode.next = current.next;newNode.previous = current;current.next = newNode; }//在链表中向前移动n个节点 function advance(n){while ((n>0) && !(this.currentNode.next==null)){this.currentNode = this.currentNode.next; n--} }//在链表中向后移动n个节点 function back(n){while (n>0 && !(this.currentNode.element=='head')){this.currentNode = this.currentNode.previous;n--;} }//显示当前节点 function show(){document.write(this.currentNode.element); }var cities = new LList(); cities.insert('Conway','head'); cities.insert('Russellville', 'Conway'); cities.insert('Carlisle', 'Russellville'); cities.insert('Alma' , 'Carlisle'); cities.insert('dezhou' , 'Alma'); cities.insert('alasijia' , 'dezhou'); cities.display(); document.write('<br>');cities.show(); cities.advance(4); document.write('<br>'); cities.show(); cities.back(2); document.write('<br>'); cities.show();
javascript中在链表中向前(向后)移动n个节点相关推荐
- Java中Date类型如何向前向后滚动时间,( 附工具类)
Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: 1 import java.text.SimpleDateFormat; 2 import java.util.Cale ...
- 带哨兵节点的链_关于链表中哨兵结点问题的深入剖析
算法 数据结构 关于链表中哨兵结点问题的深入剖析 最近正在学习UC Berkeley的CS61B这门课,主要是采用Java语言去实现一些数据结构以及运用数据结构去做一些project.这门课不仅告诉你 ...
- RT-Thread中的链表结构
文章目录 RT-Thread中的链表组织结构 RT-Thread中的链表操作 链表节点的插入 链表节点的删除 链表节点元素访问 RT-Thread中的链表组织结构 RT-Thread中的链表是带表 ...
- javascript中的链表结构—双向链表
1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...
- 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。
/* 16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序. */ # include <iostream> # include <stdlib.h> # i ...
- 【问题描述】在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素。【输入形式】循环输入若干个整数,以字母结束输入,建立带头结点的单链表。【输出形式】输出最
[问题描述] 在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素. [输入形式] 循环输入若干个整数,以字母结束输入,建立带头结点的单链表. [输出形式] 输出最大值与最 ...
- ajax 请求成功 再执行javascript,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- LeetCode(237)——删除链表中的节点(JavaScript)
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例1: 输入: head = [4,5 ...
- 【Java】牛客网 删除链表中重复的结点
题目描述 : 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表 1->2->3->3->4->4->5 ...
最新文章
- 开发日记 20210316
- 数据结构与算法系列 目录
- 基于FPGA的图像增强系统的verilog开发(3000+字)
- Flash中的SLC/MLC/MLC--基础
- 那年我学过的SpringBoot笔记
- java并发学习--线程池(一)
- 远心镜头(Telecentric lens)原理介绍
- java输出 JButton,Java JButton用法
- dtu MySQL_DTU-DATACENTER
- 电脑系统win8计算机在哪里设置开机密码,电脑怎样设置开机密码_win8开机密码设置...
- 登陆器生成登陆器不显示服务器列表,GeeM2单机登录器读取不到列表怎么办?
- 清除购物车的php代码,ecshop 退出清空购物车
- 2020蓝桥杯省赛B组C++(第二场)真题
- 哈萨克斯坦大型“零元购”抓捕现场
- 微信小程序的页面美化
- 大数据---旅游业的新挑战
- STP(生成树协议)总结
- 简单实用的批量去除水印方法及操作步骤
- Android应用层View绘制流程与源码分析
- meta 标签的使用以及作用
热门文章
- seafile Windows MySQL_seafile4.3.1 + windows 2012 server +mysql 部署记录(3)
- 车牌识别算法_易泊车牌识别算法助力智慧城市交通
- weblogic进程自动关闭_手机内存不够还卡顿,那是你不会清理,关闭这3个设置就变流畅...
- 已知原函数和导函数的关系_根据函数表达式该如何求函数值
- Java中this关键字的详解
- html中遍历表单,萌新提问!!!如何用for循环循环表单?
- java epub 删除一页_java如何实现批量删除pdf指定的页数
- linux并发控制方法,linux系统并发控制
- java gc检测工具_Java自带的性能监测工具之jstat
- Emscripten 单词_免费下载 | 北师大版高中英语教材重点单词汇总(可下载mp3版本)...