数据结构复习:单链表
public class LinkedList {
long count;
Node head;
public LinkedList() {
count = 0;
}
public void add(Object value) {
Node newNode = new Node(value);
if (head == null) {
// 如果链表为空,则直接将头指针指向newNode
head = newNode;
} else {
// 如果链表不为空,则在末尾节点后增加节点
getNodeByIndex(count - 1).next = newNode;
}
count++;
}
public Node getNodeByIndex(long index) {
if (index < 0 || index >= count) {
throw new IndexOutOfBoundsException("超出链表最大索引了");
}
Node searchNode = head;
// 注意i的范围,搜索的时候
// i不能大于或等于index,因为当index=count-1时候,searchNodex.next肯定是为null
// ,会造成NullPointerException
for (long i = 0; i < index; i++) {
searchNode = searchNode.next;
}
return searchNode;
}
public void removeAt(long index) {
if (index < 0 || index >= count) {
throw new IndexOutOfBoundsException("超出链表最大索引了");
}
// 删除头结点
if (0 == index) {
head = head.next;
} else {
// //先找到index 的前驱节点
Node preNode = getNodeByIndex(index - 1);
preNode.next = preNode.next.next;
}
count--;
}
/**
* 在指定索引处加入节点
*
* @param index
* @param value
*/
public void insert(int index, Object value) {
Node tempNode;
if (0 == index) {
if (null == head) {
head = new Node(value);
} else {
tempNode = new Node(value);
tempNode.next = head;
//插入的节点成为了头节点
head = tempNode;
}
}else{
//找到节点index的前驱节点
Node preNode = getNodeByIndex(index-1);
tempNode = new Node(value);
tempNode.next = preNode.next;
preNode.next = tempNode;
}
count++;
}
private class Node {
Object data;
Node next;
public Node(Object value) {
this.data = value;
}
}
public long size() {
return count;
}
@Override
public String toString() {
Node tempNode = head;
StringBuffer sb = new StringBuffer();
while (tempNode != null) {
sb.append("\t" + tempNode.data.toString());
tempNode = tempNode.next;
}
return sb.toString();
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println("空链表中加入1,2,3,4后:"+list.toString());
list.removeAt(3);
list.removeAt(2);
list.removeAt(1);
System.out.println("移除位置3,2,1上的数据后:"+list.toString());
list.insert(1, 2);
list.insert(2, 3);
list.insert(3, 4);
System.out.println("在位置1,2,3上插入数据后:"+list.toString());
}
}
转载于:https://www.cnblogs.com/ChrisWang/archive/2009/09/01/Data-Structure-Review-Java-Single-LinkedList.html
数据结构复习:单链表相关推荐
- 数据结构:单链表中在P结点前插入S结点
标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...
- 基本的数据结构:单链表(Singly Linked List)
一.基本的数据结构:单链表(Singly Linked List) 什么是单链表? 下面是百度百科给出的官方解释: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表 ...
- Java数据结构——用单链表编写一个简易通讯录
Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...
- 【数据结构】单链表的实现
文章目录 1. 链表 1.1 链表的概念及结构 1.2 链表的分类 1.3 链表的实现 1. 4 结尾 1. 链表 之前我们实现了顺序表,接下来来学习链表,并且理解顺序表和链表的区别 1.1 链表的概 ...
- 数据结构:单链表——带头结点与不带头结点步骤详解
单链表:带头结点与不带头结点详解 在本人的另一篇文章中,通过java实现了带头结点和不带头结点的单链表,有兴趣的小伙伴可以去看下数据结构(一):链表(Linked List) 这两天回顾下链表的知识, ...
- 【C数据结构】单链表的实现以及链表和顺序表的优缺点
文章目录 一.链表和顺序表的相辅相成 二.认识链表的最简单结构(单链表) 1.单链表的结构: 2.单链表的简单操作实现: (1).提前准备(头文件和测试源文件) (2).单链表的头插.尾插与创建一个新 ...
- 大家一起学数据结构之单链表
最近工作上得一些感触,要想不当码农学好数据结构是必须滴. 好了,话不多说,下面开始第一个内容 单链表 一.先来介绍下单链表得结构吧 大概就这样了,别嫌丑. 单链表有带头结点得和不带头结点得,其中每个节 ...
- python数据结构之单链表
今天终于把大学都没想明白的链表数据结构整明白了,也算小小的收获,挺好玩的.文后附链表操作示意图. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. ...
- 数据结构之单链表 python实现
链表是线性表的链式存取的数据结构,是一种链式存取的数据结构,是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点 ...
最新文章
- 戈峻:英特尔推动嵌入式教育 意在双赢
- php源代码保护——PHP加密方案分析解密还原
- [云炬小程序实战笔记] 第3章 云炬博客小程序全局配置
- PDF阅读器Foxit Reader 2.2简体中文版
- 实现机器学习的循序渐进指南X——KMeans
- Android学习之Activity生命周期
- 通信原理matlab仿真教程 赵鸿图,通信原理MATLAB仿真教程中国通信学会普通高等教育“十二五”规划教材立项项目课件作者赵鸿图茅艳第8章节.ppt...
- 数学建模——层次分析法模型
- 【sketchup 2021】草图大师的场景优化工具3【新建材质、材质编辑面板的详细说明】【重要】
- python输入整数反转输出_Python反转输出正整数
- python将文字转换成图片_使用Python脚本将文字转换为图片的实例分享
- 想做赴日软件工程师,为公为私
- 数据库管理员、系统分析员、数据库设计人员,应用程序员的职责是什么?
- 漫谈程序员系列:薪资,你是我不能言说的伤
- VMD常用命令(转载)
- 二维空间最近点对问题 python
- 万物云开启路演:拟募资8亿美元 淡马锡与高瓴是基石投资者
- QC新旧七图汇总连载13——过程决策方法图(PDPC)
- 为什么你的微信群设置不了管理员?
- java登录注册抽奖完整代码_Java抽奖系统(附完整代码)
热门文章
- 题目1105:字符串的反码
- ASP.NET程序中常用的三十三种代码 〔转〕
- 《LeetCode力扣练习》第11题 C语言版 (做出来就行,别问我效率。。。。)
- php redis 接口,PHP 开发 APP 接口 --Redis篇(示例代码)
- 计算机仿真和vr的区别,AR对比VR有何不同?你能分清楚他们的区别么
- 反arp攻击软件_网络安全工程师教Kali Linux:ARP欺骗概述
- hive导数据到mysql 自增主键出错_老大问我:“建表为啥还设置个自增 id ?用流水号当主键不正好么?”...
- java获取id值_从另一页获取ID值[重复]
- sylog mysql_syslog-ng+loganalyzer搭建日志集中监控平台
- Win10:你需要来自XXX的权限才能对此文件夹进行更改