-1

我正在做“算法第四版”一书的练习 1.3.26。

/** * 1.3.26 编写一个方法 remove(),它以链表
* 和字符串键作为参数,并删除
列表中所有以键作为其项字段的节点 *。
*
* java LinkListRemove to
* to be or to go to to die
* ^z / ^d
* remove before:
* to be or to to go to to to die
* remove 结果:
* be or go die
*尺寸:4
*
*/

我的实现在这里LinkListRemove,它的工作原理。但我觉得它不优雅。单链表是否可以只使用一次遍历?

我的思路是一个两步的过程:

  1. 从第一个删除连续的键,处理后,链表以非键节点开始或为空。
  2. 在第一个节点之后删除匹配的节点,现在链接列表以非关键节点开始或为空。

如果你想运行它,你需要这个 jar 文件

4

1 回答 1

0

据我从您的问题中了解到的,您希望从列表中删除与给定键匹配的所有元素。

是的,这可以在列表的一次迭代中完成。以下步骤应该会有所帮助:

Node temp =null;
if(key != null && first != null){
    if(key.equals(first.item)){               
        temp = first;
        first = first.next;
        temp.link=null;
        temp =null;
        return;
    }
    else{
        Node tempIt = first.link;
        temp = first;
        while(tempIt != null)
            {
                if(key.equals(tempIt.item)){
                    temp.link = tempLt.link;
                    tempLt.link = null;
                    tempLt = null;
                }
                temp = tempLt;
                tempLt= tempLt.next;
            }
        }
}   
return; 
于 2013-06-09T11:16:22.257 回答