単独でリンクされたリストの最後の要素を削除するアルゴリズムを読んでいます。 私はリンクされたリストオブジェクトと呼ばれるListNodeがあるとします。私は、リストの最後のノードを削除する方法を見出しJavaの単一リンクリストからテールを削除する方法
public class ListNode {
private int data;
private ListNode next;
public ListNode(int data) {
this.data = data;
}
public int getData() {
return this.data;
}
public void setData(int data) {
this.data = data;
}
public ListNode getNext() {
return this.next;
}
public void setNext(ListNode next) {
this.next = next;
}
}
は次のとおりです。すべてがあるので、このコードが動作しているか、私は混乱しています
public ListNode deleteAtTail(ListNode head) {
if (head == null || head.next == null) return null;
ListNode node = head;
while(node.next.next != null) {
node = node.next;
}
node.next = null;
return head;
}
「ノード」を介して。ただし、リターンヘッドの場合、最後のノードは削除されます。 したがって、私はそれがどのように機能しているのだろうか、それはJavaで「価値に渡される」ことに関連しているのでしょうか?
しかし、すべてが "head"ではなく "node"変数を通過します。だから、変数 "node"の次のノードをnullに設定すると、headの最後の要素は削除されます。 –
'head'はリストの最初のノードを指し、これは第3のノードを指し示す第2のノードを指し、....は最後のノードを指し示す最後のノードの次のものを指す。これらのポインタのいずれかを変更した場合(次のノードのポインタを最後のノードに変更するなど)、リストが変更されます。 – Eran
ありがとう、私はついにそれが起こった理由を知った。 –