最近学习数据结构,自己定义了一个双链表,在添加重复的节点的时候,程序陷入死循环,请教一下如何解决。代码如下:
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();
}
}



