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;
    }
    }
    }

  • 相关阅读:
    [校内模拟赛T3]火花灿灿_二分答案_组合数学_贪心
    [loj#539][LibreOJ NOIP Round #1]旅游路线_倍增_dp
    [loj#2005][SDOI2017]相关分析 _线段树
    [bzoj3162]独钓寒江雪_树hash_树形dp
    [bzoj2746][HEOI2012]旅行问题 _AC自动机_倍增
    [bzoj2597][Wc2007]剪刀石头布_费用流
    [bzoj4818][Sdoi2017]序列计数_矩阵乘法_欧拉筛
    vue中的组件传值
    vue中的修饰符
    箭头函数递归斐波那契数列
  • 原文地址:https://www.cnblogs.com/handsome1013/p/5341396.html
Copyright © 2011-2022 走看看