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-----循环链表的主要内容,如果未能解决你的问题,请参考以下文章