《算法4》1.3.26习题详解

浏览:1720 发布日期:2024-10-14 23:25:32

1.3.26题 编写一个remove方法,删除所有等于key的值

链表的数据-> [java, python, java, python, rust, rust]:

NodeStr first = new NodeStr("java");
NodeStr second = new NodeStr("python");
NodeStr third = new NodeStr("java");
NodeStr fourth = new NodeStr("python");
NodeStr fifth = new NodeStr("rust");
NodeStr sixth = new NodeStr("rust");
first.setNext(second);
second.setNext(third);
third.setNext(fourth);
fourth.setNext(fifth);
fifth.setNext(sixth);

prev表示前一个节点,它初始值为null,temp指向当前节点。

代码如下:

public static void remove(NodeStr firstNode, String key)
{
    NodeStr prev = null;
    NodeStr temp = firstNode;
    while (temp != null)
    {
        if (temp.getItem().equals(key))
        {
            // 表示当前是第一个节点
            if (prev == null)
            {
                temp = temp.getNext();
                firstNode = temp;
            }
            else // 不是第一个节点,且prev是不等于key的节点, prev.next执行temp.next
            {
                prev.setNext(temp.getNext());
                temp = prev.getNext();
            }
        }
        else
        {
            prev = temp;
            temp = temp.getNext();
        }
    }

    System.out.println("遍历剩余元素");
    NodeStr p2 = firstNode;
    while (p2 != null)
    {
        System.out.println(p2.getItem());
        p2 = p2.getNext();
    }
}