和上一道删除重复的元素不同,上一道只是去重,这一道是去掉“重复出现的元素和它自己”
思路:头结点(哨兵节点),因为我们可能删掉首节点
代码实现:
import java.util.*;
public class Solution {
public ListNode deleteDuplicates (ListNode head) {
//定义头结点
ListNode dummy = new ListNode(-1);
//带头节点链表,dummy始终指向链表头
dummy.next = head;
//双指针
ListNode pre = dummy;
ListNode cur = head;
while(cur!=null &&cur.next!=null)
{
if(cur.val==cur.next.val)
{
ListNode temp = cur.next;
//遍历重复节点,直到找到不重复的节点或者节点为空
while(temp!=null && temp.val==cur.val)
{
temp = temp.next;
}
//链表断开,指向不重复的元素,修改当前比较节点
pre.next = temp;
cur = temp;
}
else
{
pre=pre.next;
cur=cur.next;
}
}
//返回去头节点链表
return dummy.next;
}
}
也不知道有没有必要画图