双向链表的介绍
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
双向链表增删改的实
public class DoubleLinked {
public static void main(String[] args) {
System.out.println("双向链表的测试");
LinkedNode hero=new LinkedNode(1,"宋江","及时雨");
LinkedNode hero2=new LinkedNode(2,"林冲","豹子头");
DoubleLinklist doubleLinklist=new DoubleLinklist();
doubleLinklist.addLinkedNode(hero);
doubleLinklist.addLinkedNode(hero2);
doubleLinklist.showLinkedNode();
System.out.println("删除后");
doubleLinklist.delLinkedNode(hero2);
doubleLinklist.showLinkedNode();
doubleLinklist.update(hero2);
}
}
class DoubleLinklist{
private LinkedNode head=new LinkedNode(0,"","");
public LinkedNode getHead() {
return head;
}
public void addLinkedNode(LinkedNode hero){
LinkedNode temp=head;
while (true){
if (temp.next==null){
temp.next=hero;
hero.pre=temp;
break;
}
temp=temp.next;
}
}
//链表的修改
//链表的更新,根据no
public void update(LinkedNode heroLink){
//temp3是辅助结点
LinkedNode temp3=head.next;
if (head.next==null){
System.out.println("链表为空");
}
while (true){
if(temp3.next==null){
System.out.println("没有这个序号的英雄");
break;
}
else if (temp3.next.no==heroLink.no){
temp3.next.nNickName=heroLink.nNickName;
temp3.next.name=heroLink.name;
break;
}
temp3=temp3.next;
}
}
public void delLinkedNode(LinkedNode hero){
LinkedNode temp=head.next;
while (true){
if (temp==null){
System.out.println("不存在改结点");
break;
}
else if(temp.no==hero.no){
temp.pre.next=temp.next;
if (temp.next!=null){
temp.next.pre=temp.pre;}
break;
}
temp=temp.next;
}
}
public void showLinkedNode(){
LinkedNode temp=head.next;
while (temp!=null){
System.out.println( temp.toString());
temp=temp.next;
}
}
}
class LinkedNode{
public int no;
public String name;
public String nNickName;
public LinkedNode next;//指向下一个结点
public LinkedNode pre;//指向前一个结点
//构造方法
public LinkedNode(int no,String name,String nNickName){
this.name=name;
this.no=no;
this.nNickName=nNickName;
}
@Override
public String toString() {
return "HeroLink{" +
"no=" + no +
", name='" + name + '\'' +
", nNickName='" + nNickName + '\''+
'}';
}
}