Java数据结构双向链表 作者:哇塞大嘴好帥
作者:哇塞大嘴好帥(哇塞大嘴好帅)
1.双向链表
双向链表也是链表的一种,他有2个指针一个指向下一个节点,一个指向前一个节点.
2.双向链表-增
/**
* 增加一个节点
* @param linkedlist 需要进行操作的链表
* @param node 要添加的元素
*/
public void putNode(Node linkedlist, Node node){
//创建临时遍历, 用于遍历链表
Node temp = linkedlist;
while (true){
//如果到了链表尾部
if (temp.next == null){
return;
}
if (node.no < temp.next.no){
break;
}
//指针下移
temp = temp.next;
}
//插入节点
node.next = temp.next;
node.pre = temp;
temp.next = node;
}
首先创建一个临时变量,用于遍历链表使用。
接下来进入死循环,如果当前节点的下一个节点**==NULL** 就代表当前链表已经遍历完毕,节点后方没有数据了,则return。
接下来进行判断,如果 node.no < temp.next.no 就代表的了找到了要添加节点的存放的位置。
接下来要添加的节点的下一个等于当前节点的下一个节点。当前节点的前一个节点等于当前节点。
如果以上判断都不满足就指针下移,查看下一个节点
3.双向链表-改
/**
* 修改节点
* @param linkedlist 需要进行从操作的链表
* @param node 需要修改的信息
*/
public void LinkedListUpdate(Node linkedlist,Node node){
//创建临时遍历, 用于遍历链表
Node temp = linkedlist.next;
while (true){
if (temp == null){
System.out.println("没有找到");
return;
}
if (temp.no == node.no){
temp.name = node.name;
break;
}
//指针下移
temp = temp.next;
}
}
首先创建一个临时遍历用于遍历链表,
接下来进入死循环,如果当前节点等于NULL就证明当前链表遍历完了,后面没有数据了直接return。 如果当前节点的no与要修改的节点no一致就证明找到了我们要修改的指定元素。接下来只要把当前元素的name修改为要修改元素的name即可。
如果if都不满足就指针下移。
4.双向链表-删
/**
* 删除指定节点
*/
public void del(Node linkedlist,int index){
//创建临时遍历, 用于遍历链表
Node temp = linkedlist.next;
if (head.next == null){
System.out.println("当前链表为NULL");
return;
}
while(true){
if (temp == null){
System.out.println("没有查找到指定下标");
break;
}
if (temp.no == index){
temp.pre.next = temp.next;
//如果不是最后一个节点
if (temp.next != null){
temp.next.pre = temp.pre;
}
}
//指针下移
temp = temp.next;
}
}
}
首先创建一个建立临时遍历用于遍历链表
接下来进行判断头节点的下一个是否为NULL如果为NULL就代表当前链表没有数据直接return
之后进入循环 如果当前节点等于空就证明没有找到指定下标,如果当前节点的no与我们要删除节点的no相同就代表了我们找到了,我们就把当前节点的上一个节点的下一个 等于 当前节点的下一个
接下来进行判断,如果当前节点的下一个不等于NULL 则 当前节点的下一个的上一个节点等于 当前节点上一个, 为什么要有这个判断,因为如果是最后一个节点进行 temp.next.pre = temp.pre; 就会爆空指针
5 双向链表-查
/**
* 遍历链表
* @param linkedlist 需要进行操作的链表
*/
public void select(Node linkedlist){
//创建临时遍历, 用于遍历链表
Node temp = linkedlist.next;
if (head.next == null){
System.out.println("您的链表为NULL");
return;
}
while (true){
if (temp == null){
break;
}
//System.out.println("pre:"+temp.pre);
System.out.println("dangqian:"+temp);
//指针下移
temp = temp.next;
}
}
首先创建一个临时遍历用于遍历链表,接下来判断链表是否拥有数据,如果没有直接return,如果判断不成立就打印当前对象,在指针下移