上一篇文章已经把单链表的实现还有一些常见的写法实现了,这次我们将继续学习新的一种相似的数据结构------双向链表。
在将双向链表之前,可以对比一下,单向链表有什么优势,劣势。
对比:
1.单向链表,查找的方向只能是一个方向,而双向链表可以向前,也可以向后查找。
2.单向链表不能够自我删除,需要靠辅助节点,而双向链表,则可以自我删除,所以前面删除的时候需要一个辅助节点。
![](https://img.haomeiwen.com/i4017523/df503ee81169c836.png)
下面将讲解一下基本实现的一些思路(带头节点):
1.遍历 方向和单链表一样。
2.添加(默认添加到最后)
1.先找到链表的最后一个结点。
2.temp.next=newNode
3.newNode.pre=temp
也有第二种添加的方式,添加到第N个节点插入。
1.遍历到第N个节点tempNodeN。
2..newNode.pre=tempNodeN.pre;
tempNodeN.pre.next=newNode;
newNode.next=tempNodeN;
tempNodeN.pre=newNode;
3.修改指定节点:
思路跟上一篇的单链表是一样的,可以看我上一篇文章。
4.删除
1.因为是双向链表,因此可以自己删除
2.先找到需要删除的节点temp
3.temp.pre.next=temp.next;
4.temp.next.pre=temp.pre
下面可以详细的看一下代码的实现:
1.遍历 方向和单链表一样。
/**
* 遍历链表
*/
public void list() {
//判断链表是否为null
if (head.next == null) {
System.out.println("链表为空!");
return;
}
HeroNode2 temp = head.next;
while (true) {
if (temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
System.out.println("====");
}
2.添加(默认添加到最后)
/**
* 添加,第一种实现默认添加到双向链表的最后
* @param heroNode2
*/
public void add(HeroNode2 heroNode2){
if(heroNode2 ==null){
System.out.println("新增的节点为空");
return;
}
HeroNode2 temp=head;
while (temp.next!=null){
temp=temp.next;
}
temp.next=heroNode2;
heroNode2.pre=temp;
}
3.修改指定节点:
```java
/**
* 修改制定节点
*/
public void updateByIndex(HeroNode2 heroNode2,int no){
if(head.next==null){
System.out.println("该双向链表为空");
}
if(heroNode2 ==null){
System.out.println("该节点为null");
return ;
}
HeroNode2 temp=head;
boolean flag=false;
while(temp.next!=null){
if(temp.next.no == no){
temp=temp.next;
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.name=heroNode2.name;
temp.nickName=heroNode2.nickName;
}
}
4.删除
```java
/**
* 删除指定节点
*/
public void deleteNoed(int no){
if(head.next==null){
System.out.println("该双向链表为空");
}
HeroNode2 temp=head;
boolean flag=false;
while(temp.next!=null){
if(temp.next.no == no){
temp=temp.next;
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.pre.next=temp.next;
temp.pre=temp.next.pre;
}
}
好了,关于双链表的基本实现就到这儿了。
感谢您阅读我的文章,如果满意可以帮我点歌赞,谢谢哈。
如果对文章部分还有什么见解或者疑惑,可以私信评论我,欢迎技术讨论。如果需要获取完整的文件资源,可以加我微信z985085305,获取我整理的全套笔记。
思想的碰撞最能促进技术的进步哦。
网友评论