# 删除链表中的重复元素 --- :::success ```go= package main import "fmt" //创建结点 结构体 type ListNode struct { Value int Next *ListNode } //链表 结构体 type LinkList struct { Head *ListNode Length int } // 创建链表结点 func NewListNode(v int) *ListNode { return &ListNode{v, nil} } // 创建空链表 func NewLinkedList() *LinkList { return &LinkList{&ListNode{0, nil}, 0} } //在i处插入节点(前插) func (list *LinkList) Insert(i int, v int) { s := NewListNode(v) pre := list.Head for count := 1; count <= i; count++ { if count == i { s.Next = pre.Next pre.Next = s list.Length++ } pre = pre.Next } } //打印链表 func (list *LinkList) PrintLinkList() { cur := list.Head.Next format := "" for cur != nil { format += fmt.Sprintf("%v", cur.Value) // 如果想完整数据使用cur替代cur.Value cur = cur.Next if cur != nil { format += "->" } } fmt.Println("LinkList length:", list.Length, "\n", format) } func (list *LinkList) DeleteDuplicatesLinkListValue() *LinkList { if list.Head == nil { return nil } for prev := list.Head; prev.Next != nil; { if prev.Value == prev.Next.Value { prev.Next = prev.Next.Next list.Length-- } else { prev = prev.Next } } return list } func (list *LinkList) Sort() *LinkList { if list.Head == nil { return nil } for i:= 0; i < list.Length; i ++ { for p := list.Head; p.Next != nil; p = p.Next { if p.Value >= p.Next.Value { p.Value, p.Next.Value = p.Next.Value, p.Value } } } return list } func main() { list := NewLinkedList() list.Insert(1, 7) list.Insert(2, 6) list.Insert(3, 8) list.Insert(4, 6) list.Insert(5, 9) list.Insert(6, 8) list.PrintLinkList() // 7->6->8->6->9->8 list.Sort() // 把无序链表变成有序链表 6->6->7->8->8->9 list.PrintLinkList() list.DeleteDuplicatesLinkListValue() // 删除有序链表中的重复元素 6->7->8->9 list.PrintLinkList() } ``` ::: ```go= LinkList length: 6 7->6->8->6->9->8 LinkList length: 6 6->6->7->8->8->9 LinkList length: 4 6->7->8->9 ``` ###### tags: `Golang`