2017-10-28 5 views
1

これは私の教師のサンプルコードです:スタックされたlinkedListでプッシュ機能はどのように機能しますか?

public void push(T item){ 
     node<T> newNode = new node<T>(item); 
     newNode.next = head; 
     head = newNode; 

    } 

これは私が理解です: 私はnewNodeと呼ばれる新しいノードを作成します。これにより、新しいノードのデータ値が項目に設定され、次の点が何もない(NULL)に設定されます。

次に、新しいノードがそのノードの隣のノードを指していると言います。それから、リストnewNodeの頭を作ります。

これは私が取得できないものです: ヘッドであった前のノードはどうなりますか? newNodeを辿り、消えてリストから抜け出すだけでなく、どうやって知っていますか?

たとえば、5が先頭であり、6がnewNodeだった場合、6はその後ろのノードとして5を指します。しかし、私たちは5歳の頭部も6歳であると言います。だから5はどうなるの?

答えて

1

を助け5.

希望だった前のヘッドを指しているノードのアドレスを指します。このビットになるだろう奇妙な答えが、多分それはポインタが設定されているか見てみるのに役立つでしょう:

だから、元のリストは次のようになります。

linkedList -(head)-> node1 -(next)-> node2 -(next)-> etc. 

は、その後、新しいノードますnode<T> newNode = new node<T>(item);

node3 -(next)-> null  
linkedList -(head)-> node1 -(next)-> node2 -(next)-> etc. 

を次に、あなたの古い頭に新しいノードポイントますnewNode.next = head;

node3 -(next)-> node1 -(next)-> node2 -(next)-> etc. 
linkedList -(head)-> node1 -(next)-> node2 -(next)-> etc. 

をそして、あなたはあなたの頭のポインタは、新しいノードに変更します。head = newNode;

linkedList -(head)-> node3 -(next)-> node1 -(next)-> node2 -(next)-> etc. 
+0

ありがとう! head3 = newNodeと言うまで、node3はリンクされたリストの一部ではありませんか? – sukiyo

+0

頭は次のようなポインタですか? :oなぜあなたは "head.next = newNode"と答えることができないのですか? – sukiyo

+1

うん頭は単なるポインタ@suikyoです。 [基本データ型](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)ではない変数は単なるポインタに過ぎません。 – luckydog32

1

最初にノードをスタックに作成するときは、最後のものを先頭に配置します。だからまず、あなたの例は5をスタックに置き、次の5はヌルを指し、スタックの先頭です。あなたは何を理解しているのですか?スタックに6を置くと、nextNode.nextは、現在headがどこにあるかのアドレスを指しています(この場合、ノード5です)。その後、ヘッドが、その後6

だから6まだこれは

+0

ありがとうございます!あなたは何を意味するのですか?次に、ヘッドはノード6のアドレスを指します。あなたは6が5の頭のアドレスを指していると言った。 – sukiyo

関連する問題