主パッケージ のインポート「FMT」 タイプstruct {LinkNode データインタフェースデータ{} // 前* LinkNode //上のポインタ 次に* LinkNode //次のポインタ } //は、二重リンクリスト(データ・セット)を作成 FUNC(ノード* LinkNode)を作成(データインタフェース{...}){ == {ゼロノードIF リターン } lenのIF(データ)== 0 { リターン } //記録ヘッドノード ヘッド:=ノード _ためには、V:データ範囲= { //の作成新しいノード newNode:=新しい新しい(LinkNode) newNode.Data = V //新しいノード上のノードを指し newNode.Prev =ノード //次現在のノードが新しいノードである newNode = node.Next 次へ//現在のノードノード ノード= node.Next } ノードノード//前のヘッドは、最後のノードを指すことが //head.Prev=node ノード=ヘッド } //二重連結リストの印刷 FUNC(ノード* LinkNode)印刷(){ IFノードゼロ== { リターン } //印刷データの正のシーケンス ノードの!=ゼロ{ IF node.Data!=ゼロ{ fmt.Println(node.Data) } ノード= node.Next } } //二重連結リスト逆印刷 FUNC(ノード* LinkNode)Print02を( ){ ノードはnil == {IF リターン } //エンドポイントリスト node.Nextため!=ゼロ{ ノード= node.Next } //フォワード印刷データから node.Prevため!=ゼロ{ IF node.Data!=ゼロ{ fmt.Println(node.Data) } ノード= node.Prev } } //数のデータ値の長さを返します FUNC(ノード* LinkNode)の長さ(){int型 == {nilをノードIFを リターン-1 } I:= 0 != node.Nextのため無記号{ I ++ ノード= node.Next } Iを返す } データ(インデックスデータ)を挿入する// FUNC(ノード* LinkNode)インデックス(int型のインデックスを、データインタフェース{}){ IFノードゼロ== { リターン } IFインデックス<0 { リターン } IFデータ==ゼロ{ 戻り } //ノード記録 preNodeを:ノード= //挿入サイクルノード検索 Iの場合:= 0; I <インデックス、I ++ { preNodeノード= ノード== IF {ゼロ リターン } = node.Nextノード } //新しいノードを作成 newNodeを:=新しい新しい(LinkNode) newNode.Dataデータ= //ポインタフィールドポイント新しいノードおよびノードAの次のノード newNode.Next =ノード newNode.Prev = preNode ノード内//次のノードが新しいノードである preNode.Next = newNode //新しいノードの次ノードへの1つのノード node.Prev newNode = } //削除データ(添字) FUNC(ノード* LinkNode)削除(INTインデックス){ IFノードゼロ== { リターン } インデックス<0 {IF リターン } //ノード記録 preNode:=ノード iについて:= 0; I <インデックス、I ++ { preNodeノード= IFノード==ゼロ{ 戻り } ノード= node.Next } //ノード削除 ノードに//次のページを次のノードに現在のノードとなる preNode.Next = node.Next //上位ノードの次のノードが現在のノードAとなりますノード 現在のノードの次のノードへの1つのノード// Aノード node.Next.Prev = preNode //現在のノード破壊 node.Data =ゼロ node.Next =ゼロ node.Prev = nilの ノード=ゼロ } //破壊リスト FUNC(ノード* LinkNode)(破壊){ IFノードゼロ== { リターン } node.Next.Destroy() node.Data =ゼロ node.Next =ゼロ node.Prev = nilの ノード=ニル }