原則として二重にリンクされたリスト

主パッケージ

のインポート「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の
	ノード=ニル
}

 

おすすめ

転載: www.cnblogs.com/lurenq/p/12081786.html