给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1-》2-》3-》3-》3-》4-》4-》5, 返回1-》2-》5.
思路:跟前后节点都不相同的节点留下,否则从链表中去掉。需要一个全新的头节点,防止头结点被去掉了。
package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
*
* @param head ListNode类
* @return ListNode类
*/
func deleteDuplicates( head *ListNode ) *ListNode {
// write code here
if head == nil {
return head
}
node := new(ListNode)
node.Next = head
newHead := node
arrVal := make(map[int]int)
for head.Next != nil {
if head.Val == head.Next.Val {
arrVal[head.Val] = 1
node.Next = head.Next
} else {
if _, ok := arrVal[head.Val]; ok {
node.Next = head.Next
} else {
node = node.Next
}
}
head = head.Next
}
if _, ok := arrVal[head.Val]; ok {
node.Next = head.Next
}
return newHead.Next
}