Go 双指针
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 || head.Next == nil {
return head
}
// 设置空的头节点
newHead := &ListNode{Next: head}
slow, fast := newHead, head
//
for fast != nil && fast.Next != nil {
// 当遇到当前节点值和下一节点值相等的节点时
// 进行while循环找到下一个不相等的节点,挂到slow节点上
if fast.Next.Val == fast.Val {
node := fast
for node != nil && node.Val == fast.Val {
node = node.Next
}
slow.Next = node
fast = node
}else{
// 当遇到当前节点值和下一节点值不相等的节点时
// slow和fast都移动到下一个节点接着遍历就行
slow = slow.Next
fast = fast.Next
}
}
return newHead.Next
} 
京公网安备 11010502036488号