链表操作Java实现
单链表
存储结构
public class ListNode {
int i;
ListNode next;
ListNode(int i) {
this.i = i;
}
public String toString() {
return String.valueOf(i);
}
}
1、头插法建表
static ListNode creatFromHead() {
ListNode head = new ListNode(-1);
for(int i = 1; i < 5;i++) {
ListNode p = new ListNode(i);
p.next = head.next;
head.next = p;
}
return head;
}
2、尾插法建表
static ListNode creatFromTail() {
ListNode head = new ListNode(-1);
ListNode next = head;
for(int i = 1; i < 5; i++) {
ListNode p = new ListNode(i);
next.next = p;
next = p;
}
return head;
}
3、查找第i个节点
static boolean find(ListNode l, int i) {
if(l != null) {
System.out.println("nullpointer");
}
if(l.next == null || i <=0) { return false; }
ListNode p = l.next;
int j = 1;//统计第几个节点
while((p.next != null) && (j<i)) {
p = p.next;
j++;
}
if(i == j) {
return true;
}
return false;
}
4、按值查找
static boolean findValue(ListNode l, int i) {
if(l != null) {
System.out.println("nullpointer");
}
if(l.next == null) { return false; }
ListNode p = l.next;
while(p != null) {
if(p.i == i) { return true; }
p = p.next;
}
return false;
}
5、计算链表长度
static int length(ListNode l) {
if(l != null) {
System.out.println("nullpointer");
}
int count = 0;
if(l.next == null) { return 0; }
ListNode p = l.next;
while(p != null) {
count++;
p = p.next;
}
return count;
}
6、插入元素
static boolean add(ListNode l, int i, ListNode element) {
if(l != null && element != null) {
System.out.println("nullpointer");
}
//判断输入i
//if(i ) {}
ListNode p = l;
int j = 0;
while(p.next != null && j < i-1) {
p = p.next;
j++;
}
if(j == (i-1)) {
element.next = p.next;
p.next = element;
return true;
}
return false;
}
7、打印链表
static void printLinkList(ListNode head) {
if(head != null) {
System.out.println("nullpointer");
}
head = head.next;
while(head != null) {
ListNode next = head.next;
System.out.print(head + " ");
head = next;
}
System.out.println();
}
链表的删除操作就不说了,和上面的操作差不多,先找第i-1各元素,然后改指针就OK,比较简单。
循环链表,在表的首尾进行操作比较合适。
双向链表,寻找前驱节点比较合适。
操作方式都差不多,还是要把最基本的单链表搞会,其他的变化一下就好。
链表操作Java实现的更多相关文章
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- 线性表概述及单链表的Java实现
一.线性表概述 线性表是指一组数据元素之间具有线性关系的元素序列,它表现为:除第一个元素没有直接前驱元素.最后一个元素没有直接后继元素外,其余所有元素都有且仅有一个直接前驱元素和直接后继元素. 根据存 ...
- 算法是什么(二)手写个链表(java)
算法是什么(二)手写个链表(java) liuyuhang原创,未经允许禁止转载 目录 算法是什么(〇) 很多语言的API中都提供了链表实现,或者扩展库中实现了链表. 但是更多的情况下,Map(或 ...
- 数据结构之链表及其Java实现
数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...
- 使用BeanUtils工具类操作Java bean
1.类的属性: 1).在Java EE中,类的属性通过setter和getter定义:类中的setter(getter)方法去除set(get)后剩余的部分就是类的属性 2).而之前叫的类的属性,即成 ...
- 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏
数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...
- YTU 2620: B 链表操作
2620: B 链表操作 时间限制: 1 Sec 内存限制: 128 MB 提交: 418 解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...
- Arrays 类操作 Java 的数组排序
使用 Arrays 类操作 Java 中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序.搜索等( ...
- C# 链表操作
关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...
随机推荐
- vue-cli3项目首页加载速度优化(cdn加速,路由懒加载,gzip压缩)
今天打算上线vue的单页面项目,上线后,首页加载速度巨慢! 原因是项目上线后,网速不够快,加载js,css等资源很慢, 打开打包好的文件发现chunk-vendors.xxxxxxx.js的包很大,达 ...
- js 继承的一个例子
<script type="text/javascript"> function Animal(){ this.species = "动物"; th ...
- openapi and light-4j
light-4j项目支持openapi规范,本文介绍一下参照相关demo做的上传功能. openapi.yaml,按照规范编写内容,/openapi/swagger可以查看对应的swagger页面,A ...
- ArcGIS Python 保存lyr
import arcpy ##################my = arcpy.GetParameterAsText(0)mylyrfile = arcpy.GetParameterAsText( ...
- 使用arcpy.mapping 更新和修复数据源
来自:https://blog.csdn.net/gisinfo/article/details/6675390 在许多情况下,您都可能需要修复数据源或重定向数据源至其他位置.然而,如果是在每个相关的 ...
- Table 'xxx.hibernate_sequence' doesn't exist
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx.hibernate_sequence' ...
- win10下EditPlus不能拖拽打开文件
今天找到篇blog,终于把win10下EditPlus不能拖拽打开文件的问题解决了:) 记录下备忘.之前通过注册表的方式添加到右键菜单,当时设置了EditPlus以管理员身份运行: 解决办法=> ...
- 基于角色的权限控制系统(role-based access control)
role-based access control(rbac),指对于不同角色的用户,拥有不同的权限 .用户对应一个角色,一个角色拥有若干权限,形成用户-角色-权限的关系,如下图所示.当一个用户进行访 ...
- Android8.0新特性总结
1.通知渠道:开发者可以自定义应用的通知内容类别,为用户提供一个可以对通知精细控制的接口,用户可以对通知 进行精细的掌控 开发指南 创建通知渠道的步骤: 创建 NotificationChann ...
- DML语句
DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查询(select),是开发人员日常使用最频繁的操作. 插入记录 表创建好后, ...