遍历一个linkedlist集合,写一个可以删除所有与“tom”相同的元素的静态方法。(集合中的元素自行添加)
时间: 2023-05-31 18:20:16 浏览: 103
### 回答1:
可以使用双指针法,一个指针p1指向当前节点,另一个指针p2指向p1的前一个节点。如果p1的值等于"tom",则将p2的next指向p1的next,即可删除p1节点。如果p1的值不等于"tom",则p1和p2同时向后移动一个节点。同时,需要注意当第一个节点即为"tom"时,需要特判处理。
### 回答2:
首先,我们需要创建一个linkedlist集合并添加元素:
```
LinkedList<String> list = new LinkedList<String>();
list.add("tom");
list.add("jerry");
list.add("tom");
list.add("lucy");
list.add("tom");
```
然后,我们可以创建一个静态方法来删除所有与“tom”相同的元素:
```
public static void removeTom(LinkedList<String> list) {
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("tom")) {
iterator.remove();
}
}
}
```
在这个方法中,我们使用Iterator来遍历集合中的每个元素。对于每个元素,我们检查它是否等于“tom”,如果是,则使用Iterator的remove()方法将元素从集合中删除。
最后,我们可以调用这个方法来删除所有与“tom”相同的元素:
```
removeTom(list);
```
现在,集合中的所有“tom”元素都已被删除。
### 回答3:
首先,需要声明一个 LinkedList 类型的变量,然后通过 add 方法向其中添加多个元素,这些元素的值可以是任意的,包括字符串类型的“tom”和其他值。然后,可以写一个静态方法,接收一个 LinkedList 参数,遍历该链表中的所有元素,如果元素的值与“tom”相同,则将其从链表中删除。具体实现方法如下:
```
public class LinkedListOperation {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("Alice");
list.add("Tom");
list.add("Bob");
list.add("Tom");
list.add("David");
list.add("Tom");
System.out.println("Before deletion: " + list);
deleteByValue(list, "Tom");
System.out.println("After deletion: " + list);
}
public static void deleteByValue(LinkedList<String> list, String value) {
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String s = it.next();
if(s.equals(value)) {
it.remove();
}
}
}
}
```
在上面的实现中,我们定义了一个名为 deleteByValue 的静态方法,接收一个 LinkedList 和一个 String 值作为参数。方法内部通过 Iterator 遍历所有元素,如果元素与 value 相等,则使用 Iterator 的 remove 方法将其从链表中删除。最后,在 main 方法中先输出链表中所有元素的值,然后调用 deleteByValue 方法,传入链表和“Tom”作为参数,最后再输出删除后的链表内容。运行该程序,则可以得到以下结果:
```
Before deletion: [Alice, Tom, Bob, Tom, David, Tom]
After deletion: [Alice, Bob, David]
```
以上实现方式可以适用于任意类型的数据,只需将 LinkedList<String> 替换成 LinkedList<T>,其中 T 为任意类型即可。
阅读全文