给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字
输入: 1->2->3->3->4->4->5 输出: 1->2->5
输入: 1->1->1->2->3 输出: 2->3
type ListNode struct {
Val int
Next *ListNode
}
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil{
return nil
}
//构造两个切片存放上面思路说的数据
slice1,slice2 := buildTwoSlice(head)
//构造返回结果的链表
return buildRsult(slice1,slice2)
}
func buildTwoSlice( head *ListNode)([]int,[]int){
slice1 := make([]int,0,0)
slice2 := make([]int,0,0)
current := head.Val
i, v := 0,0
for head != nil{
temp := head.Val
slice1 = append(slice1,temp)
v++
//如果当前值和原来值一样
if temp == current{
//如果切片的大小是0,说明第一次
if len(slice2)==0{
slice2 = append(slice2,v)
}else{
//否则原来下标处的值+1
slice2[i] = v
}
}else{
//当前值和原来值不一样,往切片新增,下标+1
slice2 = append(slice2,v)
i++
}
//修改当前值
current = temp
head = head.Next
}
}
func buildResult(slice1,slice2 []int) *ListNode{
temp := &ListNode{0,nil}
result := temp
//组装一个新的链表
for i,v := range slice2{
if i ==0 && v != 1{
continue
}
if i ==0 && v ==1{
temp.Next = &ListNode{slice1[v-1],nil}
temp = temp.Next
continue
}
if v - slice2[i-1] ==1{
temp.Next = &ListNode{slice1[v-1],nil}
temp = temp.Next
}
}
return result.Next
}
type ListNode struct {
Val int
Next *ListNode
}
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil{
return nil
}
//创建一个临时链表
temp := &ListNode{0,nil}
//将指针指向返回值
result := temp
//临时变量用来标记当前节点和next节点相等时,next节点也不加入临时链表
falg := false
for head != nil{
next := head.Next
//如果next为空或者不相等
if next == nil || next.Val != head.Val{
//先判断falg
if falg{
falg = false
}else{
//否则构造临时链表
temp.Next = &ListNode{head.Val,nil}
temp = temp.Next
}
//else表示相等
}else{
falg = true
}
head = head.Next
}
return result.Next
}
func deleteDuplicates(head *ListNode) {
if head == nil{
return head;
}
//判断节点的next不为空,并且当前节点等于next节点
if head.Next != nil && head.Val == head.Next.Val{
//循环直到当前节点不等于next节点
for head.Next != nil && head.Val == head.Next.Val{
head = head.Next
}
//这时相当于去重剩余的链表
return deleteDuplicates(head.Next)
}else{
//否则将去重后的节点赋值给head.Next节点
head.Next = deleteDuplicates(head.Next)
}
return head
}
欢迎大家关注微信公众号:“golang那点事”,更多精彩期待你的到来