当前位置: 首页 > 编程日记 > 正文

带头结点的线性表的链式实现

复习了顺序实现后,自己模仿着写了链式实现

/*** @author lirui 带头结点的线性表的链式实现*/
public class MyLinkList<T> {// 内部类LNode,代表链表结点class LNode {private T data;private LNode next;public LNode() {}public LNode(T data, LNode next) {this.data = data;this.next = next;}}// 保存该链表头节点private LNode headerNode;// 保存该链表尾节点private LNode tailNode;// 链表的长度private int size;// 创建空的带表头的链表public MyLinkList() {headerNode = new LNode();headerNode.data = null;headerNode.next = null;tailNode = headerNode;}// 以指定元素创建链表public MyLinkList(T element) {this();LNode node = new LNode(element, null);headerNode.next = node;size++;tailNode = node;}// 返回链表的长度public int length() {return size;}// 返回索引为index的元素public T get(int index) {if (index < 0 || index > size - 1) {throw new IndexOutOfBoundsException("索引越界");}LNode temp = headerNode;for (int i = 0; i <= index; i++) {temp = temp.next;}return temp.data;}// 根据索引元素,返回索引值public int location(T elementT) {LNode temp = headerNode;int count = -1;while (temp.next != null) {temp = temp.next;count++;if (temp.data == elementT) {return count;}}return -1;}// 向链表中的指定位置插入一个元素public void insert(T elementT, int index) {if (index < 0 || index > size) {throw new IndexOutOfBoundsException("索引越界");}LNode node = new LNode(elementT, null);LNode temp = headerNode;for (int i = 0; i < index; i++) {temp = temp.next;}node.next = temp.next;temp.next = node;// 如果在最后添加,要把为节点变化if (index == size) {tailNode = node;}size++;}// 尾插法建表public void addTail(T elementT) {LNode node = new LNode(elementT, null);tailNode.next = node;tailNode = node;size++;}// 头插法建表public void addHead(T elementT) {LNode node = new LNode(elementT, null);node.next = headerNode.next;headerNode.next = node;size++;if (size == 1) {tailNode = node;}}// 删除链表指定索引处的元素public void delete(int index) {if (index < 0 || index > size - 1) {throw new IndexOutOfBoundsException("索引越界");}LNode temp = headerNode;for (int i = 0; i < index; i++) {temp = temp.next;}temp.next = temp.next.next;// 如果删除的是最后一个元素,尾节点也要变化。if (index == size - 1) {tailNode = temp;}size--;}// 删除最后一个元素public void deleteLast() {delete(size - 1);}// 判断是否为空public Boolean isEmpty() {return size == 0;}// 清空链表public void clear() {headerNode = null;tailNode = null;size = 0;}// 展现链表@Overridepublic String toString() {if (size == 0) {return "[]";} else {StringBuffer sBuffer = new StringBuffer();sBuffer.append("[");LNode temp = headerNode;while (temp.next != null) {temp = temp.next;sBuffer.append(temp.data + ", ");}sBuffer.delete(sBuffer.length() - 2, sBuffer.length());sBuffer.append("]");return sBuffer.toString();}}// 返回表中指定索引上的元素public static void main(String[] args) {MyLinkList<String> linkList = new MyLinkList<>();System.out.println(linkList.isEmpty());linkList.addHead("aaa");System.out.println(linkList.isEmpty());linkList.addHead("bbb");linkList.addHead("bbb");linkList.addTail("ccc");linkList.addTail("ddd");System.out.println(linkList);System.out.println(linkList.get(2));System.out.println(linkList.headerNode.data);System.out.println(linkList.tailNode.data);System.out.println(linkList.length());System.out.println(linkList.location("bbb"));System.out.println(linkList.location("fff"));linkList.insert("kkk", 2);System.out.println(linkList);System.out.println(linkList.size);linkList.insert("ttttt", 6);System.out.println(linkList);System.out.println(linkList.size);System.out.println(linkList.tailNode.data);linkList.delete(5);System.out.println(linkList);System.out.println(linkList.size);System.out.println(linkList.tailNode.data);linkList.deleteLast();System.out.println(linkList);System.out.println(linkList.size);System.out.println(linkList.tailNode.data);linkList.deleteLast();System.out.println(linkList);System.out.println(linkList.size);System.out.println(linkList.tailNode.data);System.out.println(linkList.isEmpty());linkList.clear();System.out.println(linkList);}}


相关文章:

《 硬件创业:从产品创意到成熟企业的成功路线图》——导读

前言这是一本关于硬件创业的书。本书的目的是为创客们和硬件企业家们提供一张可将产品创意成功转化为成熟企业产品的路线图。软件创业的方式在过去的五年里已经很大程度上模式化了。有各种免费的工具帮助软件企业家们迅速创建公司、展开协作、进行部署和调控&#xff1b;此外&a…

Matlab与线性代数 -- 矩阵的乘法

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

一个 .net 程序员的梦想!大哥们帮帮我好吗?

我是一个刚学 .net 编程不久的程序员&#xff0c;我特别喜欢用 .net &#xff0c;一心想建一个.net初学者程序示例网&#xff0c;网站宗旨是&#xff1a;注册后每一个程序员都可以在上面发表自己的程序示例&#xff0c;这样为 .net初学者提供一个很好的学习网&#xff0c;由于本…

用父节点表示法表示一棵树

今天学习&#xff0c;把书上的代码自己边对照&#xff0c;边敲了一下。 package mytree;import java.util.ArrayList; import java.util.List;/*** 用父节点表示法表示一棵树。* * author lirui* param <E>*/ public class TreeParent<E> {public static class Nod…

AJAX学习基础:简单介绍数据岛使用方法

数据岛指的是存在Html网页中的xml代码段&#xff0c;它在Html中形成了一个数据的集合&#xff0c;数据岛允许我们在Html网页中集成xml&#xff0c;对xml编写脚本. 数据岛有它特有的形式&#xff0c;由标记xml开始&#xff0c;在开始标记中要有一个ID属性&#xff0c;用于指定…

《UG NX8.0中文版完全自学手册》一第1章 UG NX 8.0简介

本节书摘来自异步社区《UG NX8.0中文版完全自学手册》一书中的第1章&#xff0c;作者 刘昌丽 , 周进&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 第1章 UG NX 8.0简介 UG NX8.0中文版完全自学手册UG&#xff08;Unigraphics&#xff09;是Unigraphics Sol…

自己动手设计RESTful API

文桥&#xff0c;13级机械工程系&#xff0c;机械电子工程专业&#xff0c;大四学生。在LSGO软件技术团队负责前端部分&#xff0c;本图文是介绍目前流行的前后端分离技术的最后一篇&#xff08;一共六篇&#xff09;&#xff0c;也是对以前技术进行归纳后用于实战的一篇&#…

Java assert关键字

一、概述 在C和C语言中都有assert关键&#xff0c;表示断言。 在Java中&#xff0c;同样也有assert关键字&#xff0c;表示断言&#xff0c;用法和含义都差不多。 二、语法 在Java中&#xff0c;assert关键字是从JAVA SE 1.4 引入的&#xff0c;为了避免和老版本的Java代…

C#动态加载DLL

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 利用反射进行动态加载和调用.Assembly assAssembly.LoadFrom(DllPath); //利用dll的路径加载 加载dll后,需要使用dll中某类.Type typeass.GetType(“TypeName”);//利用类型的命名空…

Matlab与线性代数 -- 矩阵的左除

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

《JavaScript应用程序设计》一一2.3 lambdas

本节书摘来华章计算机出版社《JavaScript应用程序设计》一书中的第2章&#xff0c;第2.3节&#xff0c;作者&#xff1a;Eric Elliott 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.3 lambdas lambdas是指那些作为数据使用的函数&#xff0c;它可以是函数的传入参数…

Java异常体系结构

一、 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框架&#xff0c; 是Java语言健壮性的一个重要体现。 Java把异常当作对象来处理&#xff0c;并定义一个基类java.lang.Throwable…

关于IssueVision命令模式中对象生命周期的困惑

在IssueVision的命令模式中有如下代码(\Patterns\Commander.cs)public static void Connect(ToolBarButton button, Command command){ToolBarButtonCommander unused new ToolBarButtonCommander(button, command);}按理说unused是内部变量,生命周期应该在Connect方法的作用范…

《树莓派开发实战(第2版)》——1.15 使用蓝牙设备

本节书摘来自异步社区《树莓派开发实战&#xff08;第2版&#xff09;》一书中的第1章&#xff0c;第1.15节&#xff0c;作者[英]Simon Monk&#xff08;蒙克&#xff09;&#xff0c;韩波 译&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.15 使用蓝牙…

C#语言与面向对象技术(5)

本图文主要掌握以下问题&#xff1a; 1. 什么是接口&#xff1f; 2. 接口的实现与类的继承有什么区别&#xff1f; 3. 接口与抽象类的相同点与不同点在哪里&#xff1f; 4. C#允许一个类实现多个接口&#xff0c;若多个接口中存在重名方法&#xff0c;如何处理&#xff1f;…

Java序列化的机制和原理

有关Java对象的序列化和反序列化也算是Java基础的一部分&#xff0c;下面对Java序列化的机制和原理进行一些介绍。 Java序列化算法透析 Serialization&#xff08;序列化&#xff09;是一种将对象以一连串的字节描述的过程&#xff1b;反序列化deserialization是一种将这些字节…

转 --有些事情需要注意

1:能不抽烟最好不抽&#xff0c;它或许可以帮助你吸引一些女生&#xff0c;但不抽绝不会招来厌烦&#xff0c;表现男子气概的途径有很多&#xff0c;没必要拿健康做赌注。2&#xff1a;给自己定目标&#xff0c;一年&#xff0c;两年&#xff0c;五年&#xff0c;也许你出生不如…

《Python数据分析与挖掘实战》一3.1 数据质量分析

本节书摘来自华章出版社《Python数据分析与挖掘实战》一书中的第3章&#xff0c;第3.1节&#xff0c;作者 张良均 王路 谭立云 苏剑林&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看 3.1 数据质量分析 数据质量分析是数据挖掘中数据准备过程的重要一环&am…

Matlab与线性代数 -- 矩阵的右除

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

Java中的值传递和引用传递

当一个对象被当作参数传递到一个方法后&#xff0c;此方法可改变这个对象的属性&#xff0c;并可返回变化后的结果&#xff0c;那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时&#xff0c;参…

ASP.NET网站建设基本常用代码

1.为按钮添加确认对话框Button.Attributes.Add("onclick","return confirm(确认?)");Button.Attributes.Add("onclick","if(confirm(确定?)){return true;}else{return false;}") 2.表格超连接列传递参数<asp:HyperLinkColumn Ta…

C#语言与面向对象技术(6)

本图文主要掌握以下问题&#xff1a; 1.什么是“类型安全”问题&#xff1f; 2.为什么要引入泛型&#xff1f; 3.什么是泛型&#xff1f; 4.泛型是如何实现的&#xff1f; 5.类与类之间存在哪些关系&#xff0c;如何表示&#xff1f;

Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

Xposed Xposed能够勾住(Hook) Android应用程序对象的方法&#xff0c;实现AOP&#xff0c;一个简单的例子&#xff1a; public class WebViewHook implements IXposedHookLoadPackage {// handleLoadPackage 会在android加载每一个apk后执行public void handleLoadPackage(Load…

Servlet防止页面被客户端缓存

服务器端的HttpServlet可通过设置特定HTTP响应头来禁止客户端缓存网页&#xff0c;以下示范代码中的response变量引用HttpServletResponse对象&#xff1a; response.addHeader("Pragma","no-cache"); response.setHeader("Cache-Control","…

二进制存储图片

二进制存储图片 如果我们要将一个图片文件二进制于数据库中&#xff0c;那么我们就必须将图片文件转化为二进制数据内容&#xff0c;再将二进制数据存储至数据库中&#xff0c;这是图片存储&#xff08;或是其它文件数据库存储&#xff09;的基本原则。 至于要从数据库中读取图…

《HTML5开发手册》——2.4 初学者“菜谱”:使用address元素提供通信信息

本节书摘来自异步社区《HTML5开发手册》一书中的第2章&#xff0c;第2.4节,作者&#xff1a; 【美】Chuck Hudson , 【英】Tom Leadbetter 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.4 初学者“菜谱”&#xff1a;使用address元素提供通信信息 规范中将address…

Matlab与线性代数 -- 矩阵的转置

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

做为程序员对sql进行的性能优化

今天面试&#xff0c;我简历上写了熟悉sql的性能优化&#xff0c;但是今天面试&#xff0c;一时想不起别的&#xff0c;就仅仅说出了一条&#xff0c;在这里再总结一些&#xff0c;完善自己的知识点。 我经常用的数据库是oracle&#xff0c;所以我的sql优化是程序员针对于orac…

asp.NET自定义服务器控件内部细节系列教程四

如大家要转载&#xff0c;请保留本人的版权:/* *Description:asp.NET自定义服务器控件内部细节系列教程*Auther:崇崇-天真的好蓝 *MSN:chongchong2008msn.com *Dates:2007-05-20*Copyright:ChongChong2008 YiChang HuBei China */四 服务器控件相关元数据Attribute 1.设计期A…

《C++游戏编程入门(第4版)》——1.12 习题

本节书摘来自异步社区出版社《C游戏编程入门&#xff08;第4版&#xff09;》一书中的第1章&#xff0c;第1.1节&#xff0c;作者&#xff1a;【美】Michael Dawson&#xff08;道森&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.12 习题 C…