因为题目中的链表已经是升序排列,因此使用两个指针,分别指向重复元素的开始和找到第一个不相同元素的的位置。只要两个指针的值不相同,则需要将p.next指向q,并且让p指向p.next。
时间复杂度:O(n)。链表的长度
空间复杂度:O(1)
public ListNode deleteDuplicates(ListNode head) {
if(head==null||head.next==null)
return head;
ListNode p=head;
ListNode q=head.next;
while(q!=null){
if(p.val!=q.val){
p.next=q;
p=p.next;
}
q=q.next;
}
p.next=null;//这个好像不要也行
return head;
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~