java-----循环链表
Posted 小鹿可可乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-----循环链表相关的知识,希望对你有一定的参考价值。
循环链表
1.单向循环链表
1.1 代码实现
List:
public interface List<E>
void addHead(E value);
void addTail(E value);
void removeHead();
void removeTail();
void removeValue(E value);
boolean contains(E value);
void change(E srcValue,E aimValue);
void show();
import src11.List;
import src11.SingleLink;
public class SingleCircleLink<T extends Comparable<T>> implements List<T>
private Node<T> head;
private Node<T> tail;
private int size;
@Override
public void addHead(T value)
Node<T> node = new Node<>(value);
if(size == 0) //链表为空
head = node;
tail = node;
size++;
else
node.next = head;//新节点的下一个指向头
head = node;//更新新头节点指向
tail.next = head;//尾部next指向新头部位置
size++;
@Override
public void addTail(T value)
Node<T> node = new Node<>(value);
if(size == 0) //链表为空
head = node;
tail = node;
size++;
else
tail.next = node;//尾部的下一个节点是node
tail = node;//更新新尾部
tail.next = head;//尾巴的下一个节点头布
size++;
@Override
public void removeHead()
if(size == 0 )
return;
else if(size == 1)
head = null;
tail = null;
else
head = head.next;
tail.next = head;
size--;
@Override
public void removeTail()
if(size == 0)
return;
else if(size == 1)
head = null;
tail = null;
else
Node<T> p = head;
for(;p.next == tail;p = p.next)
;
tail = p;
p.next = head;
size--;
@Override
public void removeValue(T value)
if(size == 0)
return;
else if(head.value.compareTo(value)==0)
removeHead();
else if(tail.value.compareTo(value) == 0)
removeTail();
else //多个节点
Node<T> p = head;
do
if (p.next.value.compareTo(value) == 0)
p.next = p.next.next;
size--;
p = p.next;
while(p!=head);
@Override
public boolean contains(T value)
return false;
@Override
public void change(T srcValue, T aimValue)
@Override
public void show()
private static class Node<E>
E value;
SingleCircleLink.Node<E> next;
public Node(E value)
this.value = value;
this.next = this;//当前节点next指向当前节点
2.双向循环链表
尾删:
p = tail.prev;
p.next = head;
head.prev = p;
tail = p;
今天也要好好学习呀~
以上是关于java-----循环链表的主要内容,如果未能解决你的问题,请参考以下文章