【数据结构】双向循环链表 Java
双向循环链表 java版
目录
下面是双向循环链表的模板,如果有需要可以拿去,也可以自己修改食用。如果您有更好的方法,可以在评论区评论,谢谢
( ̄▽ ̄)"
过程
最开始的时候,头是空的
head=null
我们申请了一个结点,结点分为三个部分
- 前驱
- 数据
- 后继
class node<T>{
T data;//数据域
node<T>pre,next;//前驱后继
node(T data){
this.data=data;
}
}
temp=new node(data)
接下来,我们把头指向这个新创建的结点,然后这个结点的前驱和后继都指向其本身
head=temp
head.next=head
head.pre=head
接下来,我们又申请了一个结点
new node(data)
这个时候,我们先把新申请的结点的后继指向head所在的结点的下一个结点,也就是temp.next=head.next
,然后我们在把这个结点的前驱指向head所在的结点,然后把head所在结点的后继结点的前驱指向新创建的结点,最后head所在的结点的后继指向新创建的结点。最后head向后面移一位
temp.next=head.next
temp.pre=head
head.next.pre=temp
head.next=temp
head=head.next
完成结点连接,这样就可以创建属于你自己的双向循环链表了。
back
代码
class LinkListNode<T>{
T data;
LinkListNode<T> pre,next;
LinkListNode(T data){
this.data=data;
}
}
//双向循环链表
public class LinkList<T> {
private LinkListNode<T> head;
private int length=0;
public void add(T t){
//容错
if(t!=null) {
if (head == null) {
head = new LinkListNode<>(t);
head.next = head;
head.pre = head;
} else {
LinkListNode<T> temp = new LinkListNode<>(t);
temp.next = head.next;
head.next.pre = temp;
head.next = temp;
temp.pre = head;
head = head.next;//保持在尾部
}
length++;
}
}
//根据下标进行查找
public T get(int index){
if(index>=length||index<0) {
return null;
} else{
LinkListNode<T> p=head;
while(index--!=0){
p=p.next;
}
return p.data;
}
}
public T delete(){
if(length>0) {
LinkListNode<T> pt;
pt=head.next;
pt.next.pre=head;
head.next=pt.next;
//置空引用
pt.next=pt.pre=null;
length--;
if(length==0)
head=null;
return pt.data;
}
return null;
}
public T delete(T data){
//值相同就删除
//容错
if(data!=null) {
int len = length;
//根据次数判断
while (len-- != 0) {
if (head.data == data)
break;
head = head.next;
}
//如果找到了
if (head.data == data) {
head.pre.next = head.next;
head.next.pre = head.pre;
//获得该节点
LinkListNode<T> temp = head;
head = head.next;
//该删除节点引用置空
temp.pre = temp.next = null;
length--;
if (length == 0) {
head = null;
}
return temp.data;
}
}
return null;
}
public int getLength() {
//获取长度
return length;
}
public LinkListNode<T> getHead() {
//获取这个头
return head;
}
}
back
完
这是小睿的博客,如果需要转载,请标注出处啦~ヾ(≧▽≦*)o谢谢。