簡體   English   中英

了解鏈表(Java)

[英]Understanding linked lists (Java)

有人可以告訴我我是否正確嗎? 我正在學期中。

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的下一個指向溫度,temp是僅next指針

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM