双向链表-增删改查

package org.structure.linkedList;

/**
 * @author cjj_1
 * @date 2020-08-04 15:57
 */
public class DoubleLinkedListDemo {
    public static void main(String[] args) {
        DoubleLinkedNode node1 = new DoubleLinkedNode(1,"张三","三三");
        DoubleLinkedNode node2 = new DoubleLinkedNode(2,"李四","44");
        DoubleLinkedNode node3 = new DoubleLinkedNode(3,"王五","55");
        DoubleLinkedNode node4 = new DoubleLinkedNode(4,"薛六","66");
        DoubleLinkedList list = new DoubleLinkedList();
        list.add(node1);
        list.add(node2);
        list.add(node3);
        list.add(node4);
        list.showList();
        System.out.println("---删除节点---");
        list.delete(node2);
        list.showList();
        System.out.println("---修改节点---");
        list.update( new DoubleLinkedNode(4,"薛六","666666"));
        list.showList();
    }
}

/**
 * 管理节点类
 */
class  DoubleLinkedList{
    DoubleLinkedNode head = new DoubleLinkedNode(0,null,null);

    /**
     * 增加节点
     * @param node
     */
    public  void add(DoubleLinkedNode node){
        DoubleLinkedNode temp = head;
        while (temp.next != null)
            temp = temp.next;
        temp.next=node;
        node.pre = temp;
    }

    /**
     * 展示双向链表
     */
    public  void showList(){
        DoubleLinkedNode temp = head;
        if(temp == null)
            System.out.println("双向链表为空!!");
        while (temp != null){
            System.out.println(temp);
            temp = temp.next;
        }
    }
    /**
     * 修改
     */
    public  void update(DoubleLinkedNode node){
        DoubleLinkedNode temp = head;
        Boolean flag = Boolean.FALSE;
        if(temp == null)
            System.out.println("双向链表为空!!");
        while (temp != null){
            if(temp.no == node.no){
                flag = Boolean.TRUE;
                break;
            }
            temp = temp.next;
        }
        if(flag){
            System.out.println("修改前:"+temp);
            temp.name = node.name;
            temp.nick = node.nick;
            System.out.println("修改后:"+temp);
        }else {
            System.out.println("没有找到节点:"+node);
        }

    }

    /**
     * 删除节点
     * @param node
     */
    public  void delete(DoubleLinkedNode node){
        DoubleLinkedNode temp = head;
        Boolean flag = Boolean.FALSE;
        if(temp == null)
            System.out.println("双向链表为空!!");
        while (temp != null){
            if(temp.no == node.no){
                flag = Boolean.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("没有找到节点:"+node);
        }
    }
}

/**
 * 节点累
 */
class  DoubleLinkedNode{
    int no;
    String name;
    String nick;
    DoubleLinkedNode next;
    DoubleLinkedNode pre;
    public DoubleLinkedNode(int no,String name,String nick){
        this.no = no;
        this.name =name;
        this.nick = nick;
    }
    @Override
    public String toString() {
        return "DoubleLinkedNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nick='" + nick + '\'' +
                '}';
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40128696/article/details/107791827