链表操作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>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...
随机推荐
- 第一次使用Open Live Writer写博客
写一下来试一试,感觉还是蛮有趣的.但是我并不知道写下来的文章是什么格式的,我刚才用VS Code打开看了一下好像都是二进制格式. 7.5正式入职,已经过去七天了.等培训结束就要去Base地了,新的生活 ...
- [linux]kali apt-get 安装mysql
环境: Linux kali 4.18.0-kali2-amd64 #1 SMP Debian 4.18.10-2kali1 (2018-10-09) x86_64 GNU/Linux 本来是想要装m ...
- C++ 仿函数和适配器
本文从不断复杂的应用场景入手,来说明C++设计仿函数和适配器的原因,并深入源码来介绍仿函数和适配器的使用方法. 仿函数 现有一个vector,需要统计大于8的元素个数. 使用std::count_if ...
- 【转】Codeforces Round #406 (Div. 1) B. Legacy 线段树建图&&最短路
B. Legacy 题目连接: http://codeforces.com/contest/786/problem/B Description Rick and his co-workers have ...
- 2016 ACM-ICPC NEERC F. Foreign Postcards (概率DP)
2016 ACM-ICPC NEERC F. Foreign Postcards 题意:有一串由C.W组成的字符串,每次截取长度为k(1<=k<=n且k随机)的前缀,如果该前缀首位为W,则 ...
- 总结调试webview的方式(安卓)
参考文章: 移动端真机调试指南 Mac 平台 Android 使用 Charles 抓包方法 Charles使用Map Local和Rewrite提高开发效率 通过chrome直接进行调试 chrom ...
- 内置对象 Date
1.内置对象 a)语言自带的对象 b)提供了常用的,基本的功能 Date 1.定义的方法 a) 获取当前时间 var date1=new Date(); co ...
- Ranorex连接Android
开始在Android上进行移动测试 只需按照下面的步骤开始使用Android进行移动测试. 1.连接设备(USB/Wi-Fi) 2.在Ranorex中添加设备 3.将设备名称设置为参数值 4.运行示例 ...
- 发布mybatis-generator-core 1.3.5的中文注释版
源码剖析介绍:基于mybatis-generator-core 1.3.5项目的修订版以及源码剖析 目前,我把该项目,发布到了Maven中央仓库中,可直接使用: 使用方式 在项目.pom中,添加以下部 ...
- postgresql获取表最后更新时间(通过触发器将时间写入另外一张表)
通过触发器方式获取表最后更新时间,并将时间信息写入到另外一张表 一.创建测试表和表记录更新时间表 CREATE TABLE weather( city varchar(80), temp_lo int ...