首页 > 其他分享 >Linklist代码实现以及代码解读

Linklist代码实现以及代码解读

时间:2024-10-23 16:34:22浏览次数:1  
标签:Node 解读 index 代码 元素 next Linklist element null

package 集合框架.LinkList;

import org.w3c.dom.Node;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

public class LinkListTest<E> {
public static class Node<E> {
/**
* @param element存储元素
* @param next下一个元素
* @param prev上一个元素
*/
E element;
Node<E> next;
Node<E> prev;

public Node(E element, Node<E> next, Node<E> prev) {
this.element = element;
this.next = next;
this.prev = prev;
}
}

private Node<E> first;
private Node<E> last;
private Node<E> item;
private int size;
private int modCount;


public boolean add(E e){
LinkLast(e);
return true;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
Node<E> current = first;
while (current != null) {
sb.append(current.element);
if (current.next != null) {
sb.append(", ");
}
current = current.next;
}
sb.append("]");
return sb.toString();
}
public void LinkLast(E e){
final Node<E> l = last;
Node<E> NewNode = new Node<>(e,null,l);
last = NewNode;
//如果是空,说明头节点和尾节点也为空,当前链表就一个元素时候,前后都指引为null
if (l == null){
first = NewNode;
}else{
//如果尾节点不为空,把尾节点指针指向新节点
l.next = NewNode;
}
size++;
}
//删除
public E remove(int index){
//检查索引是否越界
checkElementIndex(index);
//指定删除元素,返回元素节点
return unlink(node(index));
}
Node<E> node(int index) {
//根据索引遍历找到删除元素引用
//如果小于集合一半,从前往后遍历
//如果大于集合一半,从后往前遍历
if(index < (size >> 1)){
Node<E> x = first;
for (int i = 0; i < index; i++){
x = x.next;
}
return x;
}else{
Node<E> x =last;
for (int i = size - 1; i > index; i--){
x = x.prev;
}
return x;
}
}
//断开连接
public E unlink(Node<E> x){
//要删除元素
E item = x.element;
//要删除元素的上一个元素
Node<E> prev = x.prev;
//要删除元素的下一个元素
Node<E> next = x.next;
//判断是否是头节点
if(prev == null){
//如果等于空是头节点,那头节点元素给下个元素
first = next;
}else{

//如果不是头节点,就让上一个元素指向下一个元素
//把要删除元素的下个元素赋值给要删除元素
prev.next = next;
//断开与上个元素的引用
x.prev =null;
}
//判断是否是尾节点
if(next == null){
//把尾部元素给上一个元素
last = prev;
}else{
//不是尾节点,就让下一个元素指向上一个元素
prev.next = next;
x.next = null;
}
//数组元素减去1一
size --;
//返回删除元素
return item;
}
public void checkElementIndex(int index) {
if(index < 0 || index >= size){
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
//改
public E set(int index, E element){
//检查索引是否越界
checkElementIndex(index);
//获取要修改元素
Node<E> node = node(index);
//这部分就是要改元素值
E oldValue = node.element;
node.element = element;
return oldValue;
}
//根据索引获取元素

public E get(int index){
Node<E> node = node(index);
return node.element;
}
//根据元素获取索引
public int indexOf(Object e){
int index = 0;
//如果元素等于null,返回null的这个元素的索引
if(e == null){
//不断遍历下一个元素
for (Node<E> x = first; x != null; x = x.next){
//下一个元素等于空返回索引
if (x.element == null){
return index;
}
index++;
}
}else{
for (Node<E> x = first ; x != null; x = x.next){
if (e.equals(x.element)){
return index;
}
index++;
}
}
return -1;
}
//查
public static void main(String[] args) {
LinkListTest<Integer> integerLinkListTest = new LinkListTest<>();
integerLinkListTest.add(1);
integerLinkListTest.add(2);
integerLinkListTest.add(3);
System.out.println(integerLinkListTest.indexOf(1));
}
}

标签:Node,解读,index,代码,元素,next,Linklist,element,null
From: https://www.cnblogs.com/Gaze/p/18497707

相关文章

  • git拉取代码时报错 cannot lock ref 'refs/remotes/origin/refactor': is at but exp
    这个错误通常发生在Git试图更新远程引用(如分支或标签)时,但本地的引用与远程的引用不匹配。具体来说,Git期望某个引用(如refs/remotes/origin/refactor)处于某个特定的提交(如4a06cb568),但实际上它指向了另一个提交(如7a05be1d8)。使用方法2解决成功解决方法清除远程引用缓存......
  • oasys 办公OA管理系统 (代码审计)
    一、项目背景:oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架二、项目配置:1、java_version:Java1.8.0_4112、数据库:phpstudy内置MySQL5.7.26......
  • PDManer 入门教程:超强代码生成工具!
    操作手册说明:https://www.yuque.com/pdmaner/docs/pdmaner-manual下载地址说明:https://gitee.com/robergroup/pdmaner/releases开源博客介绍说明:4.0最新版说明https://my.oschina.net/skymozn/blog/5515012PDman2.2.0下载地址:http://www.downza.cn/soft/278049.htmlPD......
  • python 爱心代码
    今天看到一段python爱心代码,后面测试跑跑importrandomfrommathimportsin,cos,pi,logfromtkinterimport*CANVAS_WIDTH=640CANVAS_HEIGHT=480CANVAS_CENTER_X=CANVAS_WIDTH/2CANVAS_CENTER_Y=CANVAS_HEIGHT/2IMAGE_ENLARGE=11设置颜色HEART_COLO......
  • 代码随想录刷题学习日记
    仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录二叉树理论基础学习二叉树有两种主要的形式:满二叉树和完全二叉树。满二叉树:只有度为0的结点和度为2的结点,且度为0的结点在同一层的二叉树。深度为k,有2^k-1个节点。完全二叉树:除了最......
  • 代码随想录-环形链表II
    题目与解析    题目链接:环形链表II本题两个关键点,1、确定有环2、确定环的入口位置 提供两种解法,第一种是我借助了一个辅助的列表来记录指针,空间复杂度O(n)比较无脑 第二种是Carl哥的双指针法,又是套圈问题,虽然很难想,但还是推荐这种方式,这才是算法解法一:publ......
  • 代码随想录-链表相交
    题解与说明要注意区分链表相交是指针相等,而不是值相等。这里当时没有想清楚,还以为leetcode的样例一给错了,原来人家是想强调这个问题哈哈这里给出三种解法:(leetcode格式)①看了代码随想录的解释后,自己写的代码。②看了代码随想录的代码后,对原有的代码循环进行优化。③......
  • 写代码被大语言模型坑之使用LocalDateTime比较两个时间差了几天
    自从去年ChatGPT3.5发布后使用了几次,现在写代码基本上离不开它和它的衍生产品们了。一方面查资料很方便,快速提炼要点总结;另一方面想写什么样的代码一问就能生成出来,功能大差不差,稍微改改就能用,大大减少使用搜索引擎的时间,是新时代高阶版的Ctrl+C/V。不过大语言模型归根揭底是靠训......
  • Git的安装与使用及如何用IDEA将代码上传到Gitee
    一、安装下载地址https://git-scm.com/安装完成后右击桌面会看到Gui是用户界面模式Bash是命令行模式输入下面代码配置用户名gitconfig--globaluser.name"wang"配置用户邮箱gitconfig--globaluser.email"[email protected]"二、码云+git仓库配置前提:......
  • 华为eNSP全面教学指南——从基础到实践,附带详细代码案例
    华为eNSP全面教学指南——从基础到实践,附带详细代码案例引言华为eNSP(EnterpriseNetworkSimulationPlatform)是一款功能强大的网络模拟工具,它允许用户在虚拟环境中配置、测试和优化网络设备。本博客旨在为新手提供一个全面、系统的学习路径,通过详细讲解每个命令并附带代......