目录
【82.删除前后相等的当前cur结点】
【82.删除前后相等的当前cur结点、以及之后所以与cur相同的结点】
【203.删除特定值val结点】
【237.删除给定node结点】
83.删除重复元素(删除后留1个)
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 1:
输入:head = [1,1,2] 输出:[1,2]
示例 2:
输入:head = [1,1,2,3,3] 输出:[1,2,3]
1.1思路与算法
由题目可以知道以下几点:
1.链表是升序,
2.存在头结点head,
3.删除重复元素后,剩下一个重复元素。
因此用分类讨论我们容易得出以下几点思路:
1.声明一个变量cur遍历单链表
(关键:cur.next != null)
2.如果前后结点值相等,则删除后一个结点
(关键:cur.next = cur.next.next;)
3.如果前后结点值不相等,则前结点向后移动一位
(关键:cur = cur.next;)
最后我们总结一下:
步骤1:【处理特殊值】,若头结点为空,则直接返回空值
步骤2:【申明辅助空间】,由于链表是升序的,因此第一个元素必不会被删除,那么只需要一个cur当前结点,而不需要dummy哑结点,
步骤3:【确定遍历条件】,通常都是一次遍历到尾,while(cur.next != null)
步骤4:【找到分类讨论点】,若如果前后结点值相等,则删除后一个结点;如果前后结点值不相等,则前结点向后移动一位
步骤5&