java数据结构-04单循环链表
Posted Jenne
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java数据结构-04单循环链表相关的知识,希望对你有一定的参考价值。
单循环链表与单链表的不同是,单循环链表尾结点的next指向第一个结点(或头结点)
代码:
无头结点:
public class SingleCircleLinkedList<E> extends AbstractList<E> { private Node<E> first; private static class Node<E> { E element; Node<E> next; public Node(E element, Node<E> next) { this.element = element; this.next = next; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(element).append("_").append(next.element); return sb.toString(); } } @Override public void clear() { size = 0; first = null; } @Override public E get(int index) { return node(index).element; } @Override public E set(int index, E element) { Node<E> node = node(index); E old = node.element; node.element = element; return old; } @Override public void add(int index, E element) { rangeCheckForAdd(index); if (index == 0) { Node<E> newFirst = new Node<>(element, first); // 拿到最后一个节点 Node<E> last = (size == 0) ? newFirst : node(size - 1); last.next = newFirst; first = newFirst; } else { Node<E> prev = node(index - 1); prev.next = new Node<>(element, prev.next); } size++; } @Override public E remove(int index) { rangeCheck(index); Node<E> node = first; if (index == 0) { if (size == 1) { first = null; } else { Node<E> last = node(size - 1); first = first.next; last.next = first; } } else { Node<E> prev = node(index - 1); node = prev.next; prev.next = node.next; } size--; return node.element; } @Override public int indexOf(E element) { if (element == null) { Node<E> node = first; for (int i = 0; i < size; i++) { if (node.element == null) return i; node = node.next; } } else { Node<E> node = first; for (int i = 0; i < size; i++) { if (element.equals(node.element)) return i; node = node.next; } } return ELEMENT_NOT_FOUND; } /** * 获取index位置对应的节点对象 * @param index * @return */ private Node<E> node(int index) { rangeCheck(index); Node<E> node = first; for (int i = 0; i < index; i++) { node = node.next; } return node; } @Override public String toString() { StringBuilder string = new StringBuilder(); string.append("size=").append(size).append(", ["); Node<E> node = first; for (int i = 0; i < size; i++) { if (i != 0) { string.append(", "); } string.append(node); node = node.next; } string.append("]"); return string.toString(); } }
以上是关于java数据结构-04单循环链表的主要内容,如果未能解决你的问题,请参考以下文章