文章标题
来源:互联网 发布:淘宝显示全球购的标志 编辑:程序博客网 时间:2024/06/14 00:33
package com.ssh.test;
public class DoubleLinkedList {
// 节点类Node
private static class Node { Object value; Node prev = this; Node next = this; Node(Object v) { value = v; } public String toString() { return value.toString(); }}private Node head = new Node(null); // 头节点private int size; // 链表大小// 以下是接口方法// 添加到链表表头public boolean addFirst(Object o) { addAfter(new Node(o), head); return true;}// 将元素添加到链表表尾public boolean addLast(Object o) { addBefore(new Node(o), head); return true;}public boolean add(Object o) { return addLast(o);}// 将元素添加到指定位置public boolean add(int index, Object o) { addBefore(new Node(o), getNode(index)); return true;}// 移除指定位置public boolean remove(int index) { removeNode(getNode(index)); return true;}// 移除链表表头元素public boolean removeFirst() { removeNode(head.next); return true;}// 移除链表表尾元素public boolean removeLast() { removeNode(head.prev); return true;}// 取到指定位置的元素值public Object get(int index) { return getNode(index).value;}// 返回链表的大小public int size() { return size;}public String toString() { StringBuffer s = new StringBuffer("["); Node node = head; for (int i = 0; i < size; i++) { node = node.next; if (i > 0) s.append(", "); s.append(node.value); } s.append("]"); return s.toString();}// 以下是实现方法// 查找链表元素private Node getNode(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException(); Node node = head.next; for (int i = 0; i < index; i++) node = node.next; return node;}// 在某元素之前添加元素private void addBefore(Node newNode, Node node) { newNode.prev = node.prev; newNode.next = node; newNode.next.prev = newNode; newNode.prev.next = newNode; size++;}// 在某元素之后添加元素private void addAfter(Node newNode, Node node) { newNode.prev = node; newNode.next = node.next; newNode.next.prev = newNode; newNode.prev.next = newNode; size++;}// 移除特定元素private void removeNode(Node node) { node.next.prev = node.prev; node.prev.next = node.next; node.prev = null; node.next = null; size--;}
}
// 有些地方还可以优化,比如查找时可以判断索引是否大于size的一半,如果是的话,就从另一头开始迭代。
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 一些SSH知识
- 一小时Docker教程
- Codeforces Round #441 div2 B. Divisiblity of Differences
- 创建使用多线程的 三种方式
- 【报错】org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBinding
- 文章标题
- Echarts 教学 渐变 柱状图 折线图 嵌套 饼图标签
- 个人博客
- IntelliJ IDEA windows与mac下常用快捷键
- Android Studio gradle 提示"unable to find valid certification"的解决办法
- linux常用命令
- $.ajax()的基本语法
- 基数排序
- Django 创建第一个项目