时间复杂度:O(n)
解题思路
首先判断链表是否为空,如果为空直接返回nil。接下来从链表头结点开始遍历,直到遍历到链表的最后一个节点,每遍历一个节点判断该结点的下一个结点的值是否与该结点的值相同,如果相同就令该结点的Next指针指向下一个结点的下一个结点,否则正常更新cur为cur的Next指针指向的结点即可。
AC代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func deleteDuplicates(head *ListNode) *ListNode {
p:=head
for p!=nil&&p.Next!=nil{
if p.Next.Val==p.Val{
p.Next=p.Next.Next
}else{
p=p.Next
}
}
return head
}
感悟
自己用快慢指针的方法AC,看了题解后发现题解代码更为简略,只需要在遍历时删除重复元素。