如何从 Java 中的链表中删除特定值? [英] How to remove a specific value from linked list in Java?

查看:29
本文介绍了如何从 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 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆