双端链表的增加,删除,修改,遍历操作的实现

package com.yg.linkedList;/*
@author  GeQiLin
@date    2020/2/21  13:46
*/

public class DoubleLinkedListDemo {
    public static void main(String[] args) {
        //测试
        System.out.println("双向链表的测试");
        DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
//        doubleLinkedList.addNode(new HereNode2(1, "宋江", "及时雨"));
//        doubleLinkedList.addNode(new HereNode2(3, "吴用", "智多星"));
//        doubleLinkedList.addNode(new HereNode2(2, "卢俊义", "玉麒麟"));
//        doubleLinkedList.addNode(new HereNode2(4, "林聪", "豹子头"));
        HereNode2 head = doubleLinkedList.getHead();
//        DoubleLinkedList.showHereNode2(head);

        //删除双向链表
//        doubleLinkedList.delNodeByNo(2);
//        System.out.println("删除后***");
//        DoubleLinkedList.showHereNode2(head);

        //修改节点信息
//        doubleLinkedList.updataNode(new HereNode2(2, "haha", "heheh"));
//        System.out.println("修改后***");
//        DoubleLinkedList.showHereNode2(head);

        //测试按照编号添加节点
        doubleLinkedList.addNodeByNo(new HereNode2(1, "宋江", "及时雨"));
        doubleLinkedList.addNodeByNo(new HereNode2(3, "吴用", "智多星"));
        doubleLinkedList.addNodeByNo(new HereNode2(2, "卢俊义", "玉麒麟"));
        doubleLinkedList.addNodeByNo(new HereNode2(4, "林聪", "豹子头"));
        DoubleLinkedList.showHereNode2(head);
    }
}

class DoubleLinkedList {
    private HereNode2 head = new HereNode2(0, "", "");

    public HereNode2 getHead() {
        return head;
    }

    //显示节点(遍历)
    public static void showHereNode2(HereNode2 head) {
        if (head.next == null) {
            System.out.println("链表为空!!");
            return;
        }
        HereNode2 temp = head;
        while (true) {

            if (temp.next == null) {
                return;
            }
            System.out.println(temp.next);
            temp = temp.next;

        }
    }

    //添加节点
    public void addNode(HereNode2 node) {
        if (node == null) {
            return;
        }
        HereNode2 temp = head;
        while (true) {
            if (temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        //形成一个双向链表
        temp.next = node;
        node.pre = temp;

    }

    //修改链表节点信息
    public void updataNode(HereNode2 newNode) {
        boolean flag = false;
        if (head.next == null) {
            System.out.println("列表为空!!");
            return;
        }
        HereNode2 temp = head.next;
        while (true) {
            if (temp == null) {
                break;
            } else if (temp.no == newNode.no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.name = newNode.name;
            temp.nickName = newNode.nickName;
        } else {
            System.out.println("该节点不存在!!");
        }
    }

    //删除节点
    public void delNodeByNo(int no) {
        boolean falg = false;
        if (head.next == null) {
            System.out.println("节点为空!!");
            return;
        }
        HereNode2 temp = head;
        while (true) {
            if (temp == null) {
                System.out.println("节点为空!!");
                break;
            }
            if (temp.no == no) {
                falg = true;
                break;
            }
            temp = temp.next;

        }
        if (falg) {
            temp.pre.next = temp.next;
            //如果temp是最后一个节点会出现空指针异常
            if (temp.next != null) {
                temp.next.pre = temp.pre;
            }


        } else {
            System.out.println("要删除的节点不存在!!");
        }
    }

    //按照编号顺序添加节点
    public void addNodeByNo(HereNode2 node) {
        if (node == null) {
            return;
        }
        boolean flag = false;
        HereNode2 temp = head;
        while (temp.next != null) {
            if (temp.next.no == node.no) {
                flag = true;
                break;
            } else if (temp.next.no > node.no) {
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            System.out.println("编号为" + temp.next.no + "的节点已经存在添加失败");
            return;
        }
        if(temp.next!=null){
            temp.next.pre=node;
            node.next=temp.next;
        }
        temp.next=node;
        node.pre=temp;


    }
}

class HereNode2 {
    public int no;
    public String name;
    public String nickName;
    public HereNode2 next;
    public HereNode2 pre;

    public HereNode2(int no, String name, String nickName) {
        this.no = no;
        this.name = name;
        this.nickName = nickName;
        this.next = next;
    }

    @Override
    public String toString() {
        return "HereNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}
发布了23 篇原创文章 · 获赞 8 · 访问量 1384

猜你喜欢

转载自blog.csdn.net/lin1214000999/article/details/104431315