有人能告诉我我是否正确吗?我正在为期中考试复习。
x是指向链表节点的变量,而不是列表t指向不在列表中的新节点。
x.next = t;
t.next = x.next;
我相信当更新t.next时,x.next不再是x后面的原始节点,而是t本身。因此它在列表中创建了一个循环
t = x.next
x = t;
我相信这与名单无关。
提前感谢!!
你也可以这样做线程安全:
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)
在这种情况下,将节点存储在temp
变量中。它不会创造循环。
Object temp = x.next;
x.next = t;
t.next = temp;
首先你有这样的列表。。
X--->Y----->Z-->
您想在X
之后插入一个节点t
现在t
是
t---->null
步骤1-现在我们有temp
指向X的下一个
x---->y----->z----->
^
|
temp--
第2步-现在x的下一步是指向t
x----->t---->
现在主列表是这样的
temp---->y---->z---->
步骤3-现在t的下一个是指向仅为next
指针的temp
temp---->y--->z---->
^
|
----------
|
x---->t---
所以结果列表是
x--->t---->y---->z----->
您已经有了对象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