链表小结2

[size=large]之前已经学习过了链表中的单向链表,这次在学习好双向链表后做一下小结,双向链表相比较单向链表的好处在于。只要知道链表中的任意一个结点即可得到整个链表,因此,在链表结点类中就不能只有一个结点属性,应该有父结点和子结点。[/size]
public class Node<E> {
//父结点跟子结点
private Node<E> child;
private Node<E> parent;
private E date;
//结点的构造器,存入数据
public Node(E e){
this.setDate(e);
}
//设置子结点的方法
public void setChild(Node<E> child) {
this.child = child;
}
//得到子结点的方法
public Node<E> getChild() {
return child;
}
//设置父结点的方法
public void setParent(Node<E> parent) {
this.parent = parent;
}
//得到父结点的方法
public Node<E> getParent() {
return parent;
}
//存入数据的方法
public void setDate(E date) {
this.date = date;
}
//得到数据的方法
public E getDate() {
return date;
}
}

[color=red]下面我们来检测一下:[/color]
public class Test {
public static void main(String []args){
printNode(creatNode());
isHoop(creatNode());
}
/**
* 建立一个双向链表
* @return:链表中的任意一个节点
*/
public static Node<String> creatNode(){
Node<String> node = new Node<String>("a");
Node<String> node1 = new Node<String>("b");

node.setChild(node1);
node1.setParent(node);

Node<String> node2 = new Node<String>("c");

node1.setChild(node2);
node2.setParent(node1);

Node<String> node3 = new Node<String>("d");

node2.setChild(node3);
node3.setParent(node2);
return node2;
}
/**
* 将链表中的数据打印出来
* @param node:链表中的任意一个节点
*/
public static void printNode(Node<String> node){
if(node!=null){
Node<String> node2 = node.getParent();
printparentNode(node2);
String s = node.getDate();
System.out.println("元素是:"+s);
Node<String> node1 = node.getChild();
printchildNode(node1);
}
}
/**
* 打印节点向上的数据
* @param node:链表中任意一个节点
*/
public static void printchildNode(Node<String> node){
if(node!=null){
Node<String> node2 = node.getChild();
String s = node.getDate();
System.out.println("元素是:"+s);
printchildNode(node2);
}
}
/**
* 打印节点下面的数据
* @param node:链表中任意一个节点
*/
public static void printparentNode(Node<String> node){
if(node!=null){
Node<String> node1 = node.getParent();
String s = node.getDate();
System.out.println("元素是:"+s);
printparentNode(node1);
}
}
/**
* 判断一个双向链表是否是环
* @param node:链表中任意一个节点
* @return
*/
public static boolean isHoop(Node<String> node){
if(node!=null){
Node<String> node1 = node.getChild();
while(node1!=null&&node!=node1){
node1 = node1.getChild();
}
if(node1==null){
System.out.println("不是环");
}else if(node==node1){
System.out.println("是环");
}
}
return false;
}
}

[size=large]这样一个简单的双向链表就已经完成了。[/size] :)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值