线性表链表实现
来源:互联网 发布:mac最好用的翻译软件 编辑:程序博客网 时间:2024/06/02 23:21
package cn.yuli.list;public class MyLinkedList<T> { private Node<T> head;//链表头结点 private Node<T> tail;//链表尾节点 private int size = 0; public MyLinkedList(){ clean(); } /** * 清空链表 */ public void clean(){ head = new Node<T>(null, null, null); tail = new Node<T>(head,null,null); head.next = tail; size = 0 ; } /** * 判断链表是否为空 * @return */ public boolean isEmpty(){ return this.size == 0; } /** * 尾部追加一个数据 * @param data */ public void add(T data){ add(size,data); } /** * 在链表中添加一个数据 * @param index * @param data */ public void add(int index,T data){ addBefore(getNode(index), data); } /** * 修改一个node的数据 * @param index * @param data * @return */ public T set(int index,T data){ Node<T> node = getNode(index); T oldData = node.data; node.data = data; return oldData; } /** * 获得索引下的数据 * @param index * @return */ public T get(int index){ return getNode(index).data; } /** * 通过折半查找法查询到索引节点 * @param index * @return */ public Node<T> getNode(int index){ Node<T> node = null; if(index<0||index>size){ throw new IndexOutOfBoundsException(); } if(index < size /2){ node = head.next; for(int i = 0;i<index;i++){ node = node.next; } }else{ node = tail; for(int i = size;i> index ; i--){ node = node.prev; } } return node; } /** * 在节点之前添加数据 * @param node * @param data */ public void addBefore(Node<T> node,T data){ Node<T> newNode = new Node<>(node.prev, data, node); newNode.prev.next = newNode; newNode.next.prev = newNode; this.size++; } /** * 删除某个节点 * @param node * @return */ public T remove(Node<T> node){ node.prev.next = node.next; node.next.prev = node.prev; this.size--; return node.data; } /** * 移除索引节点 * @param index * @return */ public T remove(int index){ return remove(getNode(index)); } /** * 长度 * @return */ public int size(){ return this.size; } /** * 节点元素 * @author yuli * * @param <T> */ private static class Node<T>{ T data;//保存的对象 Node<T> prev;//前一个元素 Node<T> next;//下一个元素 public Node(Node<T> prev,T data,Node<T> next) { this.data = data; this.prev = prev; this.next = next; } }}
阅读全文
0 0
- 线性表链表实现
- 线性表链接实现--双循环链表
- 数据结构学习---线性表链表实现
- 线性表链式实现
- 线性表链式实现
- 线性表链式 实现
- 线性表链表
- 线性表链表
- 数据结构---线性表链式实现
- 线性表链式存储实现
- 线性表链式存储结构实现--静态链表
- 线性表链式存储结构实现 --单向循环链表
- 线性表链式存储结构实现 --双向循环链表
- 线性表链式存储的实现
- 线性表链式存储C++实现
- 线性表链式存储的实现
- 线性表链式存储的实现详解
- 线性表链式存储的实现详解
- ZooKeeper学习
- 变速计时器
- json
- 如何给二维数组按照具体某行,某列排序
- Mysql外键级联动作(删除和更新)
- 线性表链表实现
- accept与connect的超时设置
- json字符串与json对象相互转换
- 排序算法学习:冒泡、选择、快速
- Java学习笔记----《head first java 》-第二章 数字游戏事例看类与对象,对象间互动。
- 世界上最经典的25句话
- web前端后端数据的交互方式总结
- 25.Scala中Curring实战详解
- 神经网络+增强学习