Go 单链表
go 单链表的实现
package fcbase import ( "fmt" ) type LNode struct { Data interface{} next *LNode } func NewLNode() *LNode { return &LNode{} } func CreateList(head *LNode, num int) { cur := head for i := 0; i < num; i++ { cur.next = NewLNode() cur.next.Data = i cur = cur.next } } func PrintList(head *LNode) { for cur := head.next; cur != nil; cur = cur.next { fmt.Print(cur.Data, " ") } fmt.Println() } //直接反向 func Reverse(head *LNode) { var pre *LNode cur := head.next for cur != nil { next := cur.next cur.next = pre pre = cur cur = next } head.next = pre } //插入, 从第二个节点开始, 一次取出插到头结点后面 func ReverseInsert(head *LNode) { cur := head.next.next head.next.next = nil for cur != nil { next := cur.next cur.next = head.next head.next = cur cur = next } } //从无序链表中删除重复项(使用hash, O(n)) func DelRepeat(head *LNode) { hash := make(map[int]bool) var pre *LNode for cur := head.next; cur != nil; { if _, ok := hash[cur.Data.(int)]; !ok { hash[cur.Data.(int)] = true pre = cur cur = cur.next } else { pre.next = cur.next cur = cur.next } } }