栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java双链表无法添加重复节点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java双链表无法添加重复节点

最近学习数据结构,自己定义了一个双链表,在添加重复的节点的时候,程序陷入死循环,请教一下如何解决。代码如下:

 1.头节点

package com.huang.linkList;

public class NodeDouble {
    public int no; //编号
    public String name; //名称
    public String niceName; //昵称
    public NodeDouble next;
    public NodeDouble pre;


    public NodeDouble(int no, String name, String niceName) {
        this.no = no;
        this.name = name;
        this.niceName = niceName;
    }

    @Override
    public String toString() {
        return "NodeDouble{" +
                "no=" + no +
                ", name='" + name + ''' +
                ", niceName='" + niceName + ''' +
                '}';
    }
}

2。双链表

package com.huang.linkList;

//双向链表
public class DoubleLinkList {
    private NodeDouble headNode = new NodeDouble(0, "", "");

    //添加节点,不考虑顺序,添加到最后
    public void addNode(NodeDouble node) throws InterruptedException {
        NodeDouble tempNode = headNode;
        while (true) {
            if (tempNode.next == null) {
                break;
            }
            tempNode = tempNode.next;
        }
        //node.next = tempNode.next;
        node.pre = tempNode;
        tempNode.next = node;
    }

    //修改
    public void uppdateNode(NodeDouble node) {
        if (headNode.next == null) {
            System.out.println("链表为空");
            return;
        }
        NodeDouble tempNode = headNode.next;
        while (true) {
            if (tempNode == null) {
                System.out.println("查无此人,请添加");
                return;
            }
            if (tempNode.no == node.no) {
                break;
            }
            tempNode = tempNode.next;
        }
        tempNode.name = node.name;
        tempNode.niceName = node.niceName;
        System.out.println("修改成功");

    }

    //删除节点
    public void deleteNode(int id) {
        if (headNode.next == null) {
            System.out.println("链表为空");
            return;
        }
        NodeDouble tempNode = headNode.next;
        while (true) {
            if (tempNode == null) {
                System.out.println("查无此人,请添加");
                return;
            }
            if (tempNode.no == id) {
                break;
            }
            tempNode = tempNode.next;
        }
        tempNode.pre.next = tempNode.next;
        if (tempNode.next != null) {
            tempNode.next.pre = tempNode.pre;
        }

        //tempNode.next.pre = tempNode.pre;
        //tempNode.next = tempNode.next.next;
        System.out.println("删除成功");
    }


    //显示链表
    public void printLinkList() {
        if (headNode.next == null) {
            System.out.println("链表为空");
            return;
        }
        NodeDouble tempNode = headNode.next;
        while (true) {
            if (tempNode == null) {
                break;
            }
            System.out.println(tempNode);
            tempNode = tempNode.next;
        }
    }

}

3.主程序

package com.huang.linkList;

public class TestDouble {
    public static void main(String[] args) throws InterruptedException {
        NodeDouble node1 = new NodeDouble(1, "a", "a");
        NodeDouble node2 = new NodeDouble(2, "b", "b");
        NodeDouble node3 = new NodeDouble(3, "c", "c");
        NodeDouble node4 = new NodeDouble(4, "d", "d");
        DoubleLinkList doubleLinkList = new DoubleLinkList();
        doubleLinkList.printLinkList();

        System.out.println("========================添加节点========================");
        doubleLinkList.addNode(node1);
        doubleLinkList.addNode(node1);
        doubleLinkList.addNode(node4);
        doubleLinkList.addNode(node3);
        doubleLinkList.addNode(node2);
        doubleLinkList.addNode(node2);

        System.out.println("========================修改节点========================");
        NodeDouble node5 = new NodeDouble(4, "e", "e");
        NodeDouble node6 = new NodeDouble(6, "d", "d");
        doubleLinkList.uppdateNode(node5);
        doubleLinkList.uppdateNode(node6);

        System.out.println("========================删除节点========================");
        doubleLinkList.deleteNode(1);
        doubleLinkList.deleteNode(2);
//        doubleLinkList.deleteNode(3);
//        doubleLinkList.deleteNode(4);
//        doubleLinkList.deleteNode(2);
//        doubleLinkList.deleteNode(5);
        System.out.println("========================输出节点========================");
        doubleLinkList.printLinkList();

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020747.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号