一、双链表
1、结构
(1)比单链表多了一个前驱指针(pre)
2、基本功能
(1)增加
newLinkNode.next = temp.next;
temp.next.pre = newLinkNode;
temp.next = newLinkNode;
newLinkNode.pre = temp;
注意:当在最后一个结点添加结点时不需要执行前两句,不然空出现空指针异常。
(2)修改
这个功能和单链表的操作基本一样
(3)删除
temp.next.pre = temp.pre
temp.pre.next = temp.next
注意:删除最后一个结点时,第二句不能使用,不然会出现空指针异常。
二、具体实现
1.增加
代码如下:
// 添加(按顺序)
public void add(LinkNode1 linkNode) {
LinkNode1 temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no > linkNode.no) {
break;
} else if (temp.next.no == linkNode.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("链表已存在该结点");
} else {
if(temp.next != null){
linkNode.next = temp.next;
temp.next.pre = linkNode;
}
temp.next = linkNode;
linkNode.pre = temp;
}
}
2.修改
代码如下:
//修改
public void update(LinkNode1 linkNode){
if(head.next == null){
System.out.println("链表为空");
return;
}
LinkNode1 temp = head;
boolean flag = false;
while (true){
if (temp.next == null){
break;
}
if(temp.next.no == linkNode.no){
flag = true;
break;
}
temp = temp.next;
}
if(true){
temp.next.no = linkNode.no;
temp.next.node = linkNode.node;
}else {
System.out.println("没有找到要修改的结点");
}
}
3.删除
代码如下:
//删除
public void del(LinkNode1 linkNode){
if(head.next == null){
System.out.println("链表为空");
return;
}
LinkNode1 temp = head.next;
boolean flag = false;
while (true){
if(temp == null){
break;
}
if(temp.no == linkNode.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.println("没有找到该结点");
}
System.out.println("此结点被删除:" + temp);
}