Java数据结构——单向链表实现
/**
* 单向链表实现类
* @Description
* 类描述:
* @author GaoAnQiu
* @Date
* @modify
* 修改记录:
*
*/
public class Link {
private int size = 0;
private Node first;
private Node last;
public Node getFirst() {
return first;
}
public void setFirst(Node first) {
this.first = first;
}
public Node getLast() {
return last;
}
public void setLast(Node last) {
this.last = last;
}
public Link() {
}
/**
* 返回链表长度
* @Description
* 方法描述:
* @return 返回类型: int
* @return
*/
public int getLength() {
return size;
}
public void printLink(Link link) {
Node temp = first;
while (temp != null) {
System.out.print(temp.getData() + "-->");
temp = temp.getNext();
}
System.out.println();
}
/**
* 返回指定位置的节点
* @Description
* 方法描述:
* @return 返回类型: Node
* @param index
* @return
*/
public Node get(int index) {
Node temp = first;
for (int i = 0; i < index; i++) {
temp = temp.getNext();
}
return temp;
}
/**
* 插入第一个元素,头和尾都指向同一个元素
* @Description
* 方法描述:
* @return 返回类型: void
*/
private void onetNode(int element) {
first = new Node();
first.setData(element);
last = first;
}
public void addHead(int element) {
if (size == 0) {
onetNode(element);
} else {
Node node = new Node();
node.setData(element);
node.setNext(first);
first = node;
}
size++;
}
/**
* 插入尾结点
* @Description
* 方法描述:
* @return 返回类型: void
* @param element
*/
public void addTail(int element) {
if (size == 0) {
onetNode(element);
} else {
Node node = new Node();
node.setData(element);
last.setNext(node);
last = node; //将插入的结点设置为尾结点
size++;
}
}
/**
* 插入中间元素
* 头尾两处需要特殊处理
* @Description
* 方法描述:
* @return 返回类型: void
* @param index
* @param element
*/
public void add(int index, int element) {
if (index > size) {
throw new IndexOutOfBoundsException("待插入的位置超过链表的最大长度。");
} else {
if (index == 0) {
//下标为0时,插入头元素
addHead(element);
} else if (size == index) {
//下标与链表长度一致时,插入尾元素
addTail(element);
} else {
Node preNode = get(index - 1); //
Node nextNode = get(index);
Node newNode = new Node();
newNode.setData(element);
preNode.setNext(newNode);
newNode.setNext(nextNode);
size++;
}
}
}
/**
* 删除头节点
* @Description
* 方法描述:
* @return 返回类型: void
*/
public void delHead() {
if (size == 0) {
throw new IndexOutOfBoundsException("空链表,无元素可删除");
} else {
if (size == 1) {
//只有一个节点时,清空链表
clear();
} else {
Node nextNode = first.getNext();
first = nextNode;
}
size--;
}
}
/**
* 清空链表
* @Description
* 方法描述:
* @return 返回类型: void
*/
public void clear() {
first = last = null;
size = 0;
}
public void delTail() {
if (size == 0) {
throw new IndexOutOfBoundsException("空链表,无可删除的元素。");
} else if (size == 1) {
clear();
} else {
//取出尾节点的前一个节点,next赋值为null
Node preTail = get(size - 2);
preTail.setNext(null);
last = preTail;
size--;
}
}
/**
* 删除节点
* @Description
* 方法描述:
* @return 返回类型: void
* @param index
*/
public void del(int index) {
if (index >= size) {
throw new IndexOutOfBoundsException("删除位置越界");
} else {
if (index == 0) {
delHead();
} else if (index == size - 1) {
delTail();
} else {
Node preNode = get(index - 1);
Node nextNode = get(index + 1);
preNode.setNext(nextNode);
size--;
}
}
}
}
public class Node {
private int data;//数据
private Node next;//指针
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
好程序员分享JQuery.get提交页面不跳转的解决方法
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> window.location.host; $(document).ready(function () { $("#btnTestGet").click(function () { jQuery.get("About.aspx", { name: "alex" }, function () { alert("aaa")}); }); }); <button id="btnTestGet" value="Test JQuery" >Test JQuery</button> 问题分析: 有些Jquery 教程上说,使用jquery.get(url,data,function(){})可以跳转。 以上代码却没有跳转,如果中间有错误的话,不能执行回调函数的,但以上代码却执行...
-
下一篇
浅谈:前端如何赋能业务?
你是否头疼于,每天做不完的需求和改不完的bug? 你是否发愁,每天撸业务代码,是否能获得技术成长? 而追求成就感的你是否想过,你所编写的一行行代码,是在反复的变化中迅速成为遗留代码,还是助公司插上腾飞的翅膀,在你死我活的战场上脱颖而出? 因此本文会将业务和前端关联起来讨论,探讨业务发展的不同时期,前端所能做的一些事情,既能解业务的困扰,也让前端同学们摆脱码工、切图仔的定位。 千言万语不如一张图,全文完。 大误,还是得详细说说。 一、初始阶段 在业务的初始阶段,在市场定位、用户诉求、产品逻辑已经明确的前提下,此时业务的核心诉求是 『尽快上线』,进行快速验证和产品迭代,当然,质量还得能过得去。所以此时技术同学的方案侧重点是: 快、爽 先说『快』,在这种情况下,什么vue/react都见鬼去,老夫只用jQuery一把梭!这是反面案例,这样就只能重构火葬场
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL数据库在高并发下的优化方案
- Docker容器配置,解决镜像无法拉取问题