题目解读
给定一个已排序的链表的头
head
, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
两个示范
思考
返回链表:返回更新链表后的头结点;
更新链表:判断重复元素,改变指针指向其下一个不重复;
判断重复元素:找当前元素值作标准,不同就迭代下一个,相同的话找后面哪个开始不同;
找后续不同的元素:改变指针,迭代 指向更后面一个
实例代码
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0,head);
ListNode cur = new ListNode();
cur = dummy;
while (cur.next != null && cur.next.next != null) {
int checkValue = cur.next.val;
if (cur.next.next.val == checkValue)
while (cur.next != null && cur.next.val == checkValue)
cur.next = cur.next.next;
else
cur = cur.next;
}
return dummy.next;
}
}
解读
1.为了不特殊处理第一个结点,减少计算量,新增头结点dummy,最后返回dummy.next即可
2.判断链表能不能继续,必须满足当前节点的后两个节点存不存在,不存在就结束;
3.记录当前判断结点值, 判断再下一个结点值是否相等,相等就迭代找到下一个结点与当前标准结点值checkValue对比,直到找到不等于(注意非空) ;不相等了就筛查当前节点的下一个了cur.next