数据结构–双向链表(Java)
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!
说明
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点
图示
代码
package link;
public class DoubleLinkList {
public static void main(String[] args) {
HeroNode2 hero1 = new HeroNode2(1,"李逵","黑旋风");
HeroNode2 hero2 = new HeroNode2(2,"宋江","及时雨");
HeroNode2 hero3 = new HeroNode2(3,"吴用","智多星");
HeroNode2 hero4 = new HeroNode2(3,"吴用hh","智多星hh");
DoubleLink doubleLink = new DoubleLink();
//添加
doubleLink.add(hero1);
doubleLink.add(hero2);
doubleLink.add(hero3);
//查找
doubleLink.list();
//修改
// doubleLink.update(hero4);
// doubleLink.list();
//删除
doubleLink.delete(3);
doubleLink.list();
}
}
class DoubleLink{
//初始化一个头结点
private HeroNode2 head = new HeroNode2(0,"","");
//返回头结点
public HeroNode2 getHead(){
return head;
}
//添加
public void add(HeroNode2 heroNode){
//辅助节点temp
HeroNode2 temp = head;
while (true){
if(temp.next == null){
break;
}
temp = temp.next;
}
//当循环结束时,temp指向链表的最后
temp.next = heroNode;
heroNode.pre = temp;
}
//修改
public void update(HeroNode2 heroNode){
if (head.next == null){
System.out.println("链表为空");
return;
}
HeroNode2 temp = head.next;
boolean flag = false;
while (true){
if (temp == null){
break;
}
if (temp.no == heroNode.no){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.name = heroNode.name;
temp.nickName = heroNode.nickName;
}else {
System.out.printf("没有找到编号%d的节点,不能修改",heroNode.no);
}
}
//删除
public void delete(int no){
HeroNode2 temp = head.next;
boolean flag = false;
while (true){
if (temp == null){
break;
}
if (temp.no == no){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.pre.next = temp.next;
//是否是最后一个节点
if (temp.next != null){
temp.next.pre = temp.pre;
}
}else {
System.out.printf("要删除的节%d点不存在",no);
}
}
//显示链表
public void list(){
if (head.next == null){
System.out.println("链表为空");
return;
}
//辅助节点temp
HeroNode2 temp = head.next;
while (true){
if (temp == null){
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}
//定义节点
class HeroNode2{
public int no;
public String name;
public String nickName;
public HeroNode2 next; //指向下一个节点
public HeroNode2 pre; //指向上一个节点
//构造器
public HeroNode2(int no,String name,String nickName){
this.no = no;
this.name = name;
this.nickName = nickName;
}
//重写toString方法
public String toString(){
return "HeroNode [ no = "+ no +",name = "+ name +",nickName = "+ nickName +"]";
}
}
感谢
百度百科
万能的网络
以及勤劳的自己