gpt4 book ai didi

Java 队列/节点 这个方法在做什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:33 25 4
gpt4 key购买 nike

---我的节点类---

class Node<E> {
public E data;
public Node<E> next;

Node(E data, Node<E> next)
{
this.data = data;
this.next = next;
}
}

---影响我列表的神秘方法---

public Node < E > mystery < E extends Comparable > (Node < E > first, E x) {
Node < E > p2 = null;
Node < E > p1 = first;
while (p1 != null && x.compareTo(p1.data) != 0) {
p2 = p1;
p1 = p1.next;
}
if (p1 != null) {
if (p1 == first) {
first = first.next;
} else {
p2.next = p1.next;
}
}
return first;
}

我尝试将我的“神秘”方法转换为“伪代码”,以尝试更好地理解它。但我仍然不明白它在做什么。

--我的伪代码--

-----While loop------
While p1 is not null/empty, and while x is not equal to p1
Set p2 equal to p1
and set p1 equal to p1.next

----If Statements------
if p1 is not empty/null and if p1 is equal to the first item in the list
then set first to first.next (moving the pointer)

if none of the above is able to be ran
then set p2.next equal to p1.next

and return first.

我的列表看起来像这样...ptr [ ] --> [10][ ] --> [20][ ] --> [30][ ] --> [40][ ] --> [50][Ø]

我需要了解我的神秘方法到底在做什么,并且能够看到如果调用这样的方法,列表会发生什么:ptr = mymy(ptr, 50);

任何帮助都会很棒。我已经被困在这个问题上有一段时间了......谢谢。

最佳答案

    Node < E > p2 = null;
Node < E > p1 = first;
while (p1 != null && x.compareTo(p1.data) != 0) {
p2 = p1;
p1 = p1.next;
}

这意味着:遍历链表中的元素,直到:

  • 您发现一个等于x的元素
    • 在本例中,p1 包含该元素,p2p1 之前的节点
  • 您已到达末尾(未找到等于 x 的元素)
    • 在本例中,p1null
if (p1 != null) {
if (p1 == first) {
first = first.next;
} else {
p2.next = p1.next;
}
}
return first;

将会发生什么:

  • 如果p1null,则表示元素x不在链表中。 if 失败,该方法返回 first 不变
  • 如果 p1 不为 null,则表示已找到元素 x,该元素包含在 p1
    • 如果p1第一个节点,则返回第二个节点
    • 否则使p2.next指向p1.next,并返回第一个节点

简而言之:该方法搜索包含x的节点,如果找到,则将其删除。该方法返回第一个节点,或者如果它被删除,则返回第二个节点。

关于Java 队列/节点 这个方法在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26722078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com