用于单链表java的deleteNode

用于单链表java的deleteNode,java,singly-linked-list,Java,Singly Linked List,我可以删除特定节点,但不能删除第一个节点 for循环始终检查位置中的下一个链接是否与目标节点相等。因此,它永远不会查看第一个值(头部)。解决这个问题最简单的方法就是添加一个子句来明确检查头部是否相等,如果它存在,则将头部推进到它的链接,否则就进入while循环来检查所有未来的链接。我相信您也会希望添加一个中断到if子句,在该子句中删除链接,除非您希望实际删除多个节点,而不是仅删除一个节点(如函数名所示) 另一种方法是检查当前位置(跟踪上一个节点),并在其等于targetNode时将其删除。如果

我可以删除特定节点,但不能删除第一个节点

for循环始终检查位置中的下一个链接是否与目标节点相等。因此,它永远不会查看第一个值(头部)。解决这个问题最简单的方法就是添加一个子句来明确检查头部是否相等,如果它存在,则将头部推进到它的链接,否则就进入while循环来检查所有未来的链接。我相信您也会希望添加一个
中断
到if子句,在该子句中删除链接,除非您希望实际删除多个节点,而不是仅删除一个节点(如函数名所示)


另一种方法是检查当前位置(跟踪上一个节点),并在其等于targetNode时将其删除。如果前面的节点为null,那么我们知道我们正在查看头部(应该更新头部),否则我们将查看列表中的中间/末端链接

public void deleteNode(Student targetNode) {
    Node position = head;
    if (position.getData().equals(targetNode)) {
        head = position.getLink();
    }
    else {

        Node nextPosition1;
        Node nextPosition2;
        while (position.getLink() != null) {

            if (position.getLink().getData().equals(targetNode)) {

                nextPosition1 = position.getLink();
                nextPosition2 = nextPosition1.getLink();
                position.setLink(nextPosition2);

            } else {
                position = position.getLink(); 
            }
        }
    }
}

也许在你的else中,你应该把head设置为null?在你开始遍历数组之前,只需添加一个检查,检查两者是否相等,如果是这样的话,那么把head设置为列表中的第二个元素,并删除第一个。很好!谢谢你的帮助!
public void deleteNode(Student targetNode) {
    Node position = head;
    if (position.getData().equals(targetNode)) {
        head = position.getLink();
    }
    else {

        Node nextPosition1;
        Node nextPosition2;
        while (position.getLink() != null) {

            if (position.getLink().getData().equals(targetNode)) {

                nextPosition1 = position.getLink();
                nextPosition2 = nextPosition1.getLink();
                position.setLink(nextPosition2);

            } else {
                position = position.getLink(); 
            }
        }
    }
}
public void deleteNode(Student targetNode) {
    Node position = head;
    Node previous = null;
    while (position != null) {
    {
        if (position.getData().equals(targetNode)) {
            if (previous == null) {
                head = position.getLink();
            }
            else {
                previous.setLink(position.getLink());
            }
            break;
        }
        else {
            previous = position;
            position = position.getLink();
        }
    }
}