单链表

存储结构

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实现的更多相关文章

  1. JAVA 链表操作:循环链表

    主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...

  2. 线性表概述及单链表的Java实现

    一.线性表概述 线性表是指一组数据元素之间具有线性关系的元素序列,它表现为:除第一个元素没有直接前驱元素.最后一个元素没有直接后继元素外,其余所有元素都有且仅有一个直接前驱元素和直接后继元素. 根据存 ...

  3. 算法是什么(二)手写个链表(java)

    算法是什么(二)手写个链表(java)   liuyuhang原创,未经允许禁止转载 目录 算法是什么(〇) 很多语言的API中都提供了链表实现,或者扩展库中实现了链表. 但是更多的情况下,Map(或 ...

  4. 数据结构之链表及其Java实现

    数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...

  5. 使用BeanUtils工具类操作Java bean

    1.类的属性: 1).在Java EE中,类的属性通过setter和getter定义:类中的setter(getter)方法去除set(get)后剩余的部分就是类的属性 2).而之前叫的类的属性,即成 ...

  6. 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏

    数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...

  7. YTU 2620: B 链表操作

    2620: B 链表操作 时间限制: 1 Sec  内存限制: 128 MB 提交: 418  解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...

  8. Arrays 类操作 Java 的数组排序

    使用 Arrays 类操作 Java 中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序.搜索等( ...

  9. C# 链表操作

    关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...

随机推荐

  1. 从斐波那契数列看java方法的调用过程

    先看斐波那契数列的定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为 ...

  2. JavaScript闭包应用场合——控制前端接口轮训

    很多人都知道JavaScript的闭包,也知道大致是一个什么意思,但是对于闭包的应用场合不是很清楚 最近在改造项目的过程之中修改前端接口轮训方式的时候用到了闭包驱动setTimeout来实现一个类似定 ...

  3. Android学习_MVC与Adapter

    一.           MVC模式 MVC模式代表Model-View-Controller(模型-视图-控制器)模式.这种模式用于应用程序的分层开发. Model(模型):代表一个存取数据的对象或 ...

  4. python操作Elasticsearch (一、例子)

    E lasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析.它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部.除了通过HTTP直接访问El ...

  5. react-hook的简单的动画插件react-simple-animate(其实是react插件,但是这里只介绍react-hook的简单用法)

    1.useAnimate(普通anima动画的形式) (1)js const animate = useAnimate({ complete: { display: 'none' }, //动画完成的 ...

  6. RecyclerView只有一行

      RecyclerView只有一行 方法1: 将RecyclerView放在父容器RelativeLayout中,并设置RelativeLayout属性 android:descendantFocu ...

  7. python —— 文本特征提取 CountVectorize

    CountVectorize 来自:python学习 文本特征提取(二) CountVectorizer TfidfVectorizer 中文处理 - CSDN博客 https://blog.csdn ...

  8. JDBC与ODBC

     ODBC(Open Database Connectivity)是一组对数据库访问的标准API,这些API通过SQL来完成大部分任务,而且它本身也支持SQL语言,支持用户发来的SQL.ODBC定义了 ...

  9. 移动端——JS(一)

    javascript(简称js)语言在移动前端可以说必不可少,许多效果都是和js相关的,包括现在移动端的一些框架:jqmobi.jqtouch.sencha touch.jquerymobile等等. ...

  10. instanceof 实现

    A instanceof B // 实现 instanceof function instance(a, b) { const proto = a.__proto__; // eslint-disab ...