zoukankan      html  css  js  c++  java
  • 链表List

    当要创建一个链表的时候,首先要创建一个节点类,在Java里面叫条目(entry表示),这个类是一个嵌套类,里面包含三个要素,element, next, previous。

    public class Link<E> {

    private static class Entry<E> {
    private E element;

    private Entry<E> next;

    private Entry<E> previous;


    public Entry(E e, Entry<E> next , Entry<E> previous) {
    this.element = e;
    this.next = next;
    this.previous = previous;
    }
    }
    }

    创建一个头结点和初始头结点,另外增加一个size用来统计节点数

    public class Link<E> {

    private transient Entry<E> header = new Entry<E>(null, null, null);
    private transient int size = 0;

    /**
    * Constructs an empty list.
    */
    public Link() {
    header.next = header.previous = header;
    }

    private static class Entry<E> {
    private E element;

    private Entry<E> next;

    private Entry<E> previous;


    public Entry(E e, Entry<E> next , Entry<E> previous) {
    this.element = e;
    this.next = next;
    this.previous = previous;
    }
    }
    }

    添加和获取、删除节点

    package com.hyd.link;

    import java.util.NoSuchElementException;

    public class Link<E> {

    private transient Entry<E> header = new Entry<E>(null, null, null);
    private transient int size = 0;

    /**
    * Constructs an empty list.
    */
    public Link() {
    header.next = header.previous = header;
    }

    public int size() {
    return this.size;
    }

    public boolean add(E e) {
    addBefore(e, header);
    return true;
    }

    public E get(int index) {
    return entry(index).element;
    }

    public E remove(int index) {
    return remove(entry(index));
    }

    private Entry<E> addBefore(E e, Entry<E> entry) {
    Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
    newEntry.previous.next = newEntry;
    newEntry.next.previous = newEntry;
    size ++;
    return newEntry;
    }

    /**
    * Returns the indexed entry.
    */
    private Entry<E> entry(int index) {
    if (index < 0 || index > size) {
    throw new IndexOutOfBoundsException("Index: " + index +
    ", Size: " + size);
    }

    Entry<E> e = header;
    if (index < (size >> 1)) {
    for (int i = 0; i <= index; i++)
    e = e.next;
    } else {
    for (int i = size; i > index; i--)
    e = e.previous;
    }


    return e;
    }

    private E remove(Entry<E> e) {
    if (e == header)
    throw new NoSuchElementException();

    E result = e.element;
    e.previous.next = e.next;
    e.next.previous = e.previous;
    e.next = e.previous = null;
    e.element = null;
    size--;
    return result;
    }

    private static class Entry<E> {
    private E element;

    private Entry<E> next;

    private Entry<E> previous;


    public Entry(E e, Entry<E> next , Entry<E> previous) {
    this.element = e;
    this.next = next;
    this.previous = previous;
    }
    }
    }

  • 相关阅读:
    opencv 单应矩阵
    对极约束
    opencv Mat 操作
    两个视角得到世界坐标系
    opencv storage 操作C++
    Python操作mysql数据库
    java——保留一位、两位小数
    数据库 select from 库名 表名 的用法
    python 使用国内镜像下载插件及报错Could not fetch URL https://pypi.org/simple/pywinauto/: There was a problem co解决方法
    pycharm下载第三方库AttributeError: module 'pip' has no attribute 'main'问题解决
  • 原文地址:https://www.cnblogs.com/handsome1013/p/5341396.html
Copyright © 2011-2022 走看看