2015-01-17 36 views
0

我寫了一個函數來使用golang在列表中找到循環。但我無法在列表中構建循環作爲輸入。如何在golang中的列表中構建一個循環

請找到下面的代碼,

package main 
    import (
     "container/list" 
     "fmt" 
    ) 
    func main() { 
     l := list.New() 
     l.PushBack(0) 
     l.PushBack(1) 
     l.PushBack(2) 
     l.PushBack(3) 
     l.PushBack(4) 
     l.PushBack(5) 

     e6 := l.PushBack(6) 
     l.PushBack(7) 
     e8 :=l.PushBack(8) 
     e9 := l.InsertAfter(9,e8) 
     l.InsertBefore(e9, e6) 

     for e:=l.Front() ; e !=nil ; e=e.Next() { 
      fmt.Println(e.Value) 
     } 
    } 

任何人都可以幫我在這?

回答

2

使用容器/列表List類型構建循環是不可能的。 List類型方法確保沒有循環。由於列表Element的下一個和上一個指針未導出,因此應用程序無法通過直接修改元素來創建循環。

您可以定義自己的類型來創建一個循環列表:

package main 

import "fmt" 

type node struct { 
    v int 
    next *node 
} 

func main() { 
    // Create list with 1, 2, 3 and print. 

    l := &node{1, &node{2, &node{3, nil}}} 
    for n := l; n != nil; n = n.next { 
     fmt.Println(n.v) 
    } 

    // Create list with loop and print at most 100 steps down the list. 

    n3 := &node{3, nil} 
    l = &node{1, &node{2, n3}} 
    n3.next = l 

    for i, n := 0, l; n != nil && i < 100; n, i = n.next, i+1 { 
     fmt.Println(n.v) 
    } 

} 

playground example

相關問題