Java Queues / Nodes这个方法在做什么?

时间:2014-11-03 19:57:00

标签: java list methods nodes

---我的节点类---

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 [] - &gt; [10] [] - &gt; [20] [] - &gt; [30] [] - &gt; [40] [] - &gt; [50] [Ø]

我需要了解我的神秘方法究竟做了什么,并且能够看到如果这样的事情被称为列表会发生什么:ptr = mystery(ptr,50);

任何帮助都会很棒。我已经坚持了一段时间了......谢谢你。

1 个答案:

答案 0 :(得分:1)

    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
    • 如果p1first节点,则返回第二个节点
    • 否则,将p2.next指向p1.next,然后返回第一个节点

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