如何从 Java 中的链表中删除特定值? [英] How to remove a specific value from linked list in Java?
本文介绍了如何从 Java 中的链表中删除特定值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
java 如何从链表中删除特定值?
我试图在我的实现中实现它,但这并不容易..
这是我想要做的:
//如何做到这一点...;<..int删除(项目项目){节点 cur = first.next;节点上一个 = 第一个;而 (cur !=null) {如果(cur.item.equals(item)){item = dequeue();}cur = cur.next;//去做}返回0;}
这些是预先设置:
公共类 LinkedQueue- 实现 Iterable
- {私有整数N;//队列中元素的数量私有节点优先;//队列开始私有节点最后;//队列结束//辅助链表类私有类节点{私人物品;接下来是私有节点;}/*** 初始化一个空队列.*/公共链接队列(){第一个 = 空;最后=空;N = 0;断言检查();}公共项目出队(){if (isEmpty()) throw new NoSuchElementException("Queue下溢");项目 item = first.item;第一个 = first.next;N--;if (isEmpty()) last = null;//避免游荡断言检查();归还物品;}
以及主要功能:
public static void main(String[] args) {LinkedQueueq = new LinkedQueue();q.enqueue("a");q.enqueue("b");q.enqueue("c");q.enqueue("a");q.enqueue("b");q.enqueue("d");q.enqueue("b");q.enqueue("abba");q.enqueue("a");q.enqueue("z");q.enqueue("a");System.out.println(q);System.out.println("删除一些元素.");q.remove("a");q.remove("f");q.remove("c");System.out.println(q);}}
我得到了这样的结果.完全没变..
<前>a b c a b d b abba a z a删除一些元素.a b d b abba a z a它只擦除值c
.我不知道为什么.
解决方案
从 Java 8 开始就有了 removeIf(Predicate super E> filter)
方法,您可以在其中放置自己的条件.>
list.removeIf(cur -> cur.item.equals(item));
How to remove a specific value from a linked list java?
I tried to make it in my implementation, but it wasn't easy..
Here is what I'm trying to make:
//How to do this...;<..
int remove(Item item) {
Node cur = first.next;
Node prev = first;
while (cur !=null) {
if (cur.item.equals(item)) {
item = dequeue();
}
cur = cur.next;
// TODO
}
return 0;
}
These are the pre-setup:
public class LinkedQueue<Item> implements Iterable<Item> {
private int N; // number of elements on queue
private Node first; // beginning of queue
private Node last; // end of queue
// helper linked list class
private class Node {
private Item item;
private Node next;
}
/**
* Initializes an empty queue.
*/
public LinkedQueue() {
first = null;
last = null;
N = 0;
assert check();
}
public Item dequeue() {
if (isEmpty()) throw new NoSuchElementException("Queue
underflow");
Item item = first.item;
first = first.next;
N--;
if (isEmpty()) last = null; // to avoid loitering
assert check();
return item;
}
And the main function:
public static void main(String[] args) {
LinkedQueue<String> q = new LinkedQueue<String>();
q.enqueue("a");
q.enqueue("b");
q.enqueue("c");
q.enqueue("a");
q.enqueue("b");
q.enqueue("d");
q.enqueue("b");
q.enqueue("abba");
q.enqueue("a");
q.enqueue("z");
q.enqueue("a");
System.out.println(q);
System.out.println("Remove some of elements.");
q.remove("a");
q.remove("f");
q.remove("c");
System.out.println(q);
}
}
And I have a result like this. It doesn't change at all..
a b c a b d b abba a z a Remove some of elements. a b d b abba a z a
It only erase value c
. I don't know why.
解决方案
Since Java 8 there is removeIf(Predicate<? super E> filter)
method where you can put your own condition.
list.removeIf(cur -> cur.item.equals(item));
这篇关于如何从 Java 中的链表中删除特定值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文