我有一段我难以理解的代码。代码片段本身是双向链表的构造函数,这很好;但是,最后一行说:(head = head.next).previous = null;这应该会删除用于从阵列a添加节点的临时节点。但它是如何工作的?如果有人可以把它分解成明确的,单独的行,那将非常有帮助。 这是构造函数:
// standard constructor
public DoublyLinkedList() {
head = tail = null;
numElements = 0;
changes = 0;
}
// constructor
public DoublyLinkedList(T[] a) {
this(); // call the standard constructor
Objects.requireNonNull(a, "a is null!");
head = tail = new Node<>(null); // a temporary node
for (T value : a) {
if (value != null) {
tail = tail.next = new Node<>(value, tail, null); // new node at the back
numElements++;
}
}
// remove the temporary node
if (numElements == 0) head = tail = null;
else (head = head.next).previous = null; // the problematic bit
}
答案 0 :(得分:0)
head = head.next;
head.previous = null;
答案 1 :(得分:0)
它是这样的:
if (numElements == 0) {
head = null;
tail = null;
}
else {
head = head.next;
head.previous = null; // the problematic bit
}
人们不应该写原始方式,它会使代码混乱,正如您刚刚发现的那样。
答案 2 :(得分:0)
让我试着为你分解一下。我假设您难以理解的代码部分如下:
else (head = head.next).previous = null; // the problematic bit
首先评估括号内的表达式,这意味着上面的代码段基本上变成了以下内容,就像我之前的其他人已经提到过的那样。
head = head.next; // move onto the next node
head.previous = null;
如果您难以理解上述逻辑,请尝试运行以下代码。在除法运算之前首先评估4 + 2。
System.out.println((4 + 2) / 2);
答案 3 :(得分:0)
第一次使用.previous
时需要临时节点。它被放在了头上。然后当它不再需要它从头上移开时。
代码中SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_name
IN (
'post title 1',
'post title 2',
'post title 3',
)
AND wp_posts.post_type = 'post'
AND ((wp_posts.post_status = 'publish'))
ORDER BY wp_posts.menu_order,
FIELD(
wp_posts.post_name,
'post title 1',
'post title 2',
'post title 3',
)
LIMIT 0, 9
无法在那里工作的问题,因为它未在循环中设置。