有人可以告诉我,如果我是对的吗?我正在读期中考试。
x是指向链表节点的变量,而不是指向链接列表节点的最后一个节点 名单。 t指向不在列表中的新节点。
x.next = t;
t.next = x.next;
我相信当更新t.next时,x.next不再是x之后的原始节点,而是t本身。所以它在列表中创建一个循环
t = x.next
x = t;
我相信这对列表没有任何意义。
提前谢谢!!
答案 0 :(得分:1)
你也可以像这样做线程安全:
t.next = x.next; // let t and x point to the SAME next.
x.next = t; // change the x.next to t(who has the old next)
答案 1 :(得分:0)
在这种情况下,temp
变量中存储节点。它不会创造循环。
Object temp = x.next;
x.next = t;
t.next = temp;
首先你有这样的清单..
X--->Y----->Z-->
您希望在t
X
现在t
是
t---->null
第1步 - 现在我们temp
指向X的下一个
x---->y----->z----->
^
|
temp--
第2步 - 现在x的下一个指向t
x----->t---->
现在主要列表就像这样
temp---->y---->z---->
第3步 - 现在,t的下一个指向只有next
指针的临时
temp---->y--->z---->
^
|
----------
|
x---->t---
结果列表是
x--->t---->y---->z----->
答案 2 :(得分:0)
您已有对象x
。这可能是链表的当前最后一个元素。现在,您创建一个新对象T
并将其链接为X
X // Lets assume X.next == NULL. So linked list looks like this X -> Null
X.next = T // Now X.next == T and T.Next == NULL, So linked list looks like this X -> T -> Null.
T.next = X.next // Now T.next == T. So linked list is X -> T <->T
这样,当您到达链表的末尾时,它将始终返回最后一个元素,而不是返回NULL
。
如果您正在为此编写一个简单的算法,首先必须创建一个元素,然后将其next
变量指向它自己。<First_element>.next = <First_element>
。因此逻辑将适用于所有实例。
这是一个简单的实验。
class Node{
Node next = null;
int id =-1;
}
public class LinkedList{
public static void main (String args[]){
Node x = new Node();
x.id = 0;
x.next = x;
// Now add a new element
Node t = new Node();
t.id =1;
x.next = t;
t.next = x.next; // Now we have a linked list of 2 elements
Node mynode = x;//First element of linked list
for(int i =0; i < 3; i++){
System.out.println(mynode.id);
mynode = mynode.next;
}
}
}
输出:
0
1
1