1、单链表的实现(java代码)
1、创建链结构实体Node
/**
* 链表结构实体类
*/
public class Node {
Node next = null; //下一节点
int data; //节点数据 public Node(int data) {
this.data = data;
}
}
2、链表的操作(链表的头结点创建、增加元素,删除元素、求链表长度、根据输入数据求下标)
/**
* 链表功能实现
*/
public class Linked_List { Node head = null; //链表头结点 /**
* 1、求链表长度:以备后续用
* 思路:遍历一个节点,记录长度加一(注意:初始长度给0)
*
* @return int:返回长度
*/
public int get_length() {
int list_length = ;
Node cur_node;
cur_node = head;
while (cur_node != null) {
list_length++;
cur_node = cur_node.next;
}
return list_length;
} /**
* 2、添加
* 思路:找到链表的末尾节点,把新的数据节点添加在后面
*
* @param date :插入的数据
*/
public void add_Node(int date) {
Node newnode = new Node(date);
if (head == null) { //判断是否只有一个头结点
head = newnode;
return;
} else {
Node temp = head;
while (temp.next != null) { //不为头节点,找到最后一个节点
temp = temp.next;
}
temp.next = newnode;
}
} /**
* 3、删除
* 思路:传入下标,根据下标,找到相应的节点,删除节点的前一节点指向删除节点下一节点
*
* @param index:删除的数据的下标
* @return
*/
public boolean delete_Node(int index) {
if (index < || index > get_length()) {
System.out.println("你所要删除的元素下标输入有问题");
return false;
}
if (index == ) {
head = head.next;
return true;
}
Node pre_node = head;
Node cur_node = pre_node.next;
int i = ;
while (pre_node != null) {
if (i == index) {
pre_node.next = cur_node.next;
return true;
} else {
pre_node = pre_node.next;
cur_node = cur_node.next;
i++;
}
}
return true;
} /**
* 4、根据输入数据求下标
* @param data:输入的数据
* @return int:返回输入数据下标
*/
public int get_data(int data) {
Node node = head;
int index = ;
while (node != null){
if (node.data == data){
return index;
}
node = node.next;
index++;
}
return -;
}
/**
* 5、打印显示输出
*/
public void print_linklist() {
Node node = head;
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
System.out.println();
} public static void main(String[] args) { //1、创建链表
Linked_List linked_list = new Linked_List();
//2、添加链表元素
linked_list.add_Node();
linked_list.add_Node();
linked_list.add_Node();
linked_list.add_Node();
//3、打印添加的元素
linked_list.print_linklist();
//4、删除下标元素
linked_list.delete_Node();
linked_list.print_linklist(); //5、获取链表长度
System.out.println("链表长度 "+ linked_list.get_length()); int index = linked_list.get_data(); if (index == -){
System.out.println("你要查找的数据不存在");
}else{
System.out.println("你要查找的数据元素下标 " + index);
}
}
}
3、实现结果小测试
链表长度 3 (1被删除,长度减一)
你要查找的数据不存在 (由于1已被删除,所有在main中求1的下标不在)
1、单链表的实现(java代码)的更多相关文章
- 理解单链表的反转(java实现)
要求很简单,输入一个链表,反转链表后,输出新链表的表头. 反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不 ...
- 数据结构(一) 单链表的实现-JAVA
数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...
- 数据结构之单链表的实现-java
一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...
- 数据结构(2):单链表学习使用java实现
单链表是单向链表,它指向一个位置: 单链表常用使用场景:根据序号排序,然后存储起来. 代码Demo: package com.Exercise.DataStructure_Algorithm.Sing ...
- 数据结构之单链表(基于Java实现)
链表:在计算机中用一组任意的存储单元存储线性表的数据元素称为链式存储结构,这组存储结构可以是连续的,也可以是不连续的,因此在存储数据元素时可以动态分配内存. 注:在java中没有指针的概念,可以理解为 ...
- [算法] 单链表插入排序(java)
实现 首先保证插入前的链表是个完整的,最后一个节点要断开 然后在插入前链表中找到比待插入节点大的最小元素,插到前面即可 Link.java class Link { private class Nod ...
- 二叉树(二叉链表实现)JAVA代码
publicclassTest{ publicstaticvoid main(String[] args){ char[] ch =newchar[]{'A','B ...
- 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】
本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...
- java 单链表反转
最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转.闲来无事,决定就这个问题进行一番尝试. 1.准备链表 准备一个由DataNode组成的单向链表,DataNode如下: pub ...
- C代码实现非循环单链表
C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...
随机推荐
- XML学习(二)
1.上期回忆 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空 ...
- 浅谈 JavaScript 垃圾回收机制
github 获取更多资源 https://github.com/ChenMingK/WebKnowledges-Notes 在线阅读:https://www.kancloud.cn/chenmk/w ...
- springboot自动配置源码解析
springboot版本:2.1.6.RELEASE SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfig ...
- Kafka 系列(二)—— 基于 ZooKeeper 搭建 Kafka 高可用集群
一.Zookeeper集群搭建 为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群. 1.1 下载 & 解压 下载对应版本 Zooke ...
- win server 2008搭建域环境
0x00 简介 1.域控:win server 2008 2.域内服务器:win server 2008.win server 2003 3.域内PC:win7 x64.win7 x32.win xp ...
- maven项目编译通过,测试用例卡住,断点也用不了
maven项目编译通过,测试用例卡住,断点也用不了.如下图 maven的tomcat插件可以运行没报错,但是网页访问一直转圈 原因: 最后发现是typeAliasesPackage这里设置了别名,所以 ...
- node实现后台权限管理系统
本文面向的是node初学者,目标是搭建一个基础的后台权限系统.使用的node框架是上手最简单的express,模板是ejs,这些在node入门的书籍中都有介绍说明,所以应该是难度较低的. 对于node ...
- 9407web常用符号
常用符号 转载自 http://www.fhdq.net/ ❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≍←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©® ...
- MYSQL批量导入数据报:[Err] 2006 - MySQL server has gone away 解决方法
使用values 后接批量数据插入,因mysql 系统参数设置导致失败(数据量过大).可通过临时修改系统参数来解决,对系统安全性无影响: set global max_allowed_packet=1 ...
- Unity/C#基础复习(5) 之 浅析观察者、中介者模式在游戏中的应用与delegate原理
参考资料 [1] <Unity 3D脚本编程 使用C#语言开发跨平台游戏>陈嘉栋著 [2] @张子阳[C#中的委托和事件 - Part.1] http://www.tracefact.ne ...