给你一个排好序的链表,删除重复元素,使所有元素仅出现一次。
1. 常规思路
从前向后遍历所有的元素,只要下一位置的元素与当前位置的相同,就跳过,扫描完整个链表就结束。
public ListNode deleteDuplicates(ListNode head)
{
// 先对传入的链表的情况进行判断
if (head == null || head.next == null)
{
return head;
}
ListNode p = head; // p 指向当前结点
ListNode q = null; // 指向当前结点的下一个结点
while (p.next != null)
{
q = p.next;
// 如果当前结点的值和下一个结点值相同(断链)
while (q != null && p.val == q.val)
{
q = q.next;
}
p.next = q;
p = q;
// 如果遍历到末尾
if (q == null)
{
break;
}
}
return head;
}