遍历
遍历和单链表一样,只是可以向前,也可以向后查找
public void list(){
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node temp = head.next;
while(temp != null){
System.out.println(temp);
temp = temp.next;
}
}
添加
添加到双向链表最后
- 先找到双向链表的最后节点temp
- temp.next = newNode
- newNode.pre = temp;
public void add(Node node){
Node temp = head;
while(true){
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = node;
node.pre = temp;
}
按照id大小添加
public void addById(Node node){
if (head.next == null) {
add(node);
return;
}
Node temp = head;
while(true){
if (temp.next == null) {
break;
}
if (node.id <= temp.next.id) {
node.next = temp.next;
node.pre = temp;
temp.next = node;
temp.next.pre = node;
return;
}
temp = temp.next;
}
temp.next = node;
node.pre = temp;
}
修改
和单链表一样
public void change(int id,String name){
if (head.next == null) {
System.out.println("空表");
return;
}
Node temp = head.next;
while(true){
if (temp == null){
break;
}
if (temp.id == id){
temp.name = name;
}
temp = temp.next;
}
}
删除
- 找到待删除节点temp
- temp.pre.next = temp.next;
- temp.next.pre = temp.pre
public void del(int id){
if (head.next == null) {
System.out.println("空表");
return;
}
Node temp = head.next;
while(true){
if (temp == null){
break;
}
if (temp.id == id) {
temp.pre.next = temp.next;
if (temp.next != null){
temp.next.pre = temp.pre;
}
return;
}
temp = temp.next;
}
}
全部代码
package 双向链表;
public class DoubleLinkList {
public static void main(String[] args) {
Node node1 = new Node(1,"张小狗子");
Node node2 = new Node(2,"张中狗子");
Node node3 = new Node(3,"张大狗子");
DoubleList list = new DoubleList();
list.add(node1);
list.add(node2);
list.add(node3);
list.list();
System.out.println("==========修改==========");
list.change(2,"狗子");
list.list();
System.out.println("==========删除==========");
list.del(2);
list.list();
System.out.println("==========id加==========");
list.addById(node1);
list.addById(node3);
list.addById(node2);
}
}
class DoubleList {
private Node head = new Node(1,"狗子");
public Node getHead() {
return head;
}
public void list(){
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node temp = head.next;
while(temp != null){
System.out.println(temp);
temp = temp.next;
}
}
public void add(Node node){
Node temp = head;
while(true){
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = node;
node.pre = temp;
}
public void change(int id,String name){
if (head.next == null) {
System.out.println("空表");
return;
}
Node temp = head.next;
while(true){
if (temp == null){
break;
}
if (temp.id == id){
temp.name = name;
}
temp = temp.next;
}
}
public void del(int id){
if (head.next == null) {
System.out.println("空表");
return;
}
Node temp = head.next;
while(true){
if (temp == null){
break;
}
if (temp.id == id) {
temp.pre.next = temp.next;
if (temp.next != null){
temp.next.pre = temp.pre;
}
return;
}
temp = temp.next;
}
}
public void addById(Node node){
if (head.next == null) {
add(node);
return;
}
Node temp = head;
while(true){
if (temp.next == null) {
break;
}
if (node.id <= temp.next.id) {
node.next = temp.next;
node.pre = temp;
temp.next = node;
temp.next.pre = node;
return;
}
temp = temp.next;
}
temp.next = node;
node.pre = temp;
}
}
class Node {
public Node pre;
public int id;
public String name;
public Node next;
public Node(int id, String name) {
this.id = id;
this.name = name;
this.pre = null;
this.next = null;
}
@Override
public String toString() {
return "Node{" +
"id=" + id +
", name='" + name + ''' +
'}';
}
}