デザインのリストを実装します。あなたは、単一または二重リンクリストを使用するように選択することができます。ヴァルと次:リスト内の1つのノードには、二つの属性を持っている必要があります。そして、valは、現在のノードの値は、次のノードポインタ/参照の横を向いています。二重リンクリストを使用するには、属性もリストを示す1つのノードを前に必要です。リスト内のすべてのノードが0インデックスされていると仮定します。
リストクラスでこれらの機能を実装します:
(インデックス)を取得:ノードのリストでインデックスの値を取得します。インデックスが無効の場合は、-1が返されます。
addAtHead(ヴァル):リストの最初の要素の前にヴァルにノードを追加します。挿入後、新しいノードは、リストの最初のノードになります。
addAtTail(ヴァル):ノードは値valに添加される、リストの最後の要素です。
addAtIndex(インデックス、ヴァル):インデックスノードのリスト前ヴァルにノードを追加します。インデックスは、リストの長さに等しい場合、ノードはリストの最後に追加されます。インデックスは、リストの長さより大きい場合、ノードが挿入されません。インデックスが0未満である場合、そのノードは、ヘッドに挿入されます。
deleteAtIndex(インデックス):インデックスインデックスが有効であれば、インデックス・ノードのリストを削除します。
例:
=新規新しいMyLinkedList LinkedListのMyLinkedList();
linkedList.addAtHead(1);
linkedList.addAtTail(3);
linkedList.addAtIndex(1,2); //リストとなる1-> 2-> 3。
linkedList.get(1)。 //戻り2
linkedList.deleteAtIndex(1); //リストは今1-> 3
linkedList.get(1); //戻り3
ヒント:
すべての値はvalの[1、1000年]、その中にあります。
[1 1000]内における操作の数。
LinkedListのビルトインライブラリを使用しないでください。
解決策1:
クラスMyLinkedList { パブリック 静的の クラスListNode { プライベート int型のval; 民間次ListNode。 公共 ListNode(INT ヴァル){ この .val = ヴァル。 } } / ** ここにあなたのデータ構造を初期化します。* / パブリックMyLinkedList(){ } プライベート ListNode listNode = NULL ; / ** リンクリストのインデックス番目のノードの値を取得します。インデックスが無効の場合は、-1を返します。* / 公共 int型のget(int型インデックス){ 場合(listNode == NULL ){ リターン -1 。 } ListNode ITR = この.listNode。 int型のカウント= 0 ; しばらく(!ITR = nullの){ 場合(==カウントインデックス){ 返すitr.val。 } カウント ++ ; ITR = itr.next。 } 戻り -1 。 } / **リンクリストの最初の要素の前に値valのノードを追加します。挿入後、新しいノードは、リンクされたリストの最初のノードになります。* / 公共 ボイド addAtHead(INT ヴァル){ ListNode newNode = 新しいListNode(ヴァル)。 newNode.nextは = この.listNodeを。 この .listNode = newNode; } / ** 追加リンクされたリストの最後の要素に値valのノード。* / 公共 ボイド addAtTail(INT ヴァル){ ListNode ITR = この.listNode。 最後ListNode = nullを。 ListNode newNode = 新しいListNode(val)で、 一方、(!ITR = NULL ){ 場合(itr.next == NULL ){ 最後 = ITR。 } ITR = itr.next。 } であれば(最後!= NULL ){ last.next = newNode。 } 他{ この .listNode = newNode。 } } / **リンクリストのインデックス番目のノードの前に値valのノードを追加します。インデックスがリンクされたリストの長さに等しい場合、ノードは、リンクされたリストの最後に追加されるであろう。インデックスが長さよりも大きい場合、ノードが挿入されません。* / 公共 ボイド addAtIndex(int型のインデックス、INT ヴァル){ 場合(インデックス<= 0 ){ addAtHead(ヴァル)。 } 他{ ListNode ITR = この.listNode。 int型のカウント= 0 ; ListNode newNode = 新しいListNode(val)で、 しばらく ITR(!=NULL ){ 場合(カウント+ 1つの== インデックス){ ListNode TMP = itr.next。 itr.next = newNode; もし(!TMP = ヌル){ newNode.next = TMP; } ブレーク; } カウント ++ ; ITR = itr.next。 } } } / ** インデックスが有効である場合、リンクされたリストのインデックス番目のノードを削除します。* / 公共 のボイドdeleteAtIndex(int型のインデックス){ ListNode ITR = この.listNode。 int型のカウント= 0 ; ListNode PREV = nullを。 しばらく(ITR =!ヌル){ 場合(カウント== インデックス){ ListNode TMP = itr.next。 もし(!PREV = ヌル){ prev.next = TMP; } 他{ この .listNode = TMP。 } 休憩; } カウント ++ ; PREV = ITR; ITR = itr.next。 } } } / ** *あなたのMyLinkedListオブジェクトがインスタンス化され、などと呼ばれます: * MyLinkedList OBJ =新しいMyLinkedList(); * int型PARAM_1 = obj.get(インデックス); * obj.addAtHead(val)で、 * obj.addAtTail(val)で、 * obj.addAtIndex(インデックス、val)で、 * obj.deleteAtIndex(インデックス); * /
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/design-linked-list