单向链表,单向传递,当需要找一个节点的前置节点时候,显得比较复杂,而双向链表可以向前向后查找。那么对于节点不仅拥有指向后置节点的next指针,而且拥有指向前置节点的prev指针。
双向链表的基本操作
由于单向链表和双向链表操作基本相同,双向链表不做过多分析,直接上代码,如有问题可以留言讨论.
/**
* 英雄节点
*/
class HeroNode{
public int rank;//排名
public String name;//姓名
public String nickname;//昵称
public HeroNode next = null;//指向下一个节点的指针
public HeroNode prev = null;//指向上一个节点的指针
public HeroNode(int rank, String name, String nickname) {
this.rank = rank;
this.name = name;
this.nickname = nickname;
}
@Override
public String toString() {
return "HeroNode{" +
"rank=" + rank +
", name='" + name + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
}
/**
* 双线链表
*/
class DoubleLinkedList{
HeroNode head = new HeroNode(0,"","");
/**
* 添加节点
* @param heroNode
*/
public void addNode(HeroNode heroNode){
HeroNode temp = head;
while (true){
if(temp.next == null){
temp.next = heroNode;
heroNode.prev = temp;
return;
}
temp = temp.next;
}
}
/**
* 遍历节点
*/
public void showNode(){
if(head.next == null){
return;
}
HeroNode temp = head.next;
while(true){
if(temp == null){
return;
}
System.out.println(temp);
temp = temp.next;
}
}
/**
* 更新节点
* @param heroNode
*/
public void updateNode(HeroNode heroNode){
HeroNode temp = head;
while (true){
if(temp != null){
if(temp.rank == heroNode.rank){
temp.name = heroNode.name;
temp.nickname = heroNode.nickname;
return;
}
temp = temp.next;
}else {
System.out.println("没有此英雄");
return;
}
}
}
/**
* 删除节点
* @param rank
*/
public void deleteNode(int rank){
HeroNode temp = head.next;
while (true){
if(temp != null){
if(temp.rank == rank){
temp.prev.next = temp.next;
temp.next.prev = temp.prev;
return;
}
}
temp = temp.next;
}
}
}
public class DoubleLinkedListDemo {
public static void main(String[] args) {
DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
//创建节点对象
HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "小星星");
HeroNode hero4 = new HeroNode(6, "林冲", "豹子头");
//将节点添加到链表中
doubleLinkedList.addNode(hero1);
doubleLinkedList.addNode(hero2);
doubleLinkedList.addNode(hero3);
doubleLinkedList.addNode(hero4);
doubleLinkedList.showNode();
System.out.println("——————————————————————————————————————————");
hero3 = new HeroNode(3, "吴用", "智多星");
doubleLinkedList.updateNode(hero3);
System.out.println("——————————————————————————————————————————");
doubleLinkedList.deleteNode(1);
doubleLinkedList.showNode();
System.out.println("——————————————————————————————————————————");
}
}