理解链表(Java)

时间:2014-10-13 06:34:48

标签: java data-structures linked-list

有人可以告诉我,如果我是对的吗?我正在读期中考试。

x是指向链表节点的变量,而不是指向链接列表节点的最后一个节点 名单。 t指向不在列表中的新节点。

x.next = t; 
t.next = x.next;

我相信当更新t.next时,x.next不再是x之后的原始节点,而是t本身。所以它在列表中创建一个循环

t = x.next 
x = t; 

我相信这对列表没有任何意义。

提前谢谢!!

3 个答案:

答案 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