大家好,我是星恒
今天的题目是昨天题目的进化题,他对链表的删除加深了理解。最重要的是学会了对循环中的特殊部分的处理,还有设置虚拟节点的情况
好了,话不多说,我们直接开始
题目:leetcode 82
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例:
示例 1:
[外链图片转存中…(img-qsrtHDAg-1705333692489)]
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
示例 2:
[外链图片转存中…(img-SIQvpZrX-1705333692490)]
输入:head = [1,1,1,2,3]
输出:[2,3]
提示:
- 链表中节点数目在范围 [0, 300] 内
- -100 <= Node.val <= 100
- 题目数据保证链表已经按升序 排列
分析:
由于我们是要删除,所以我们需要知道删除节点的前一个节点。我们遍历该链表,当遇到当前值的下一个值和下下个值相同时,把他们删除,并记录该值,然后看后面的情况
题解:
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return head;
}
ListNode dummy = new ListNode(0, head);
ListNode cur = dummy;
while (cur.next != null && cur.next.next != null) {
if (cur.next.val == cur.next.next.val) {
int x = cur.next.val;
while (cur.next != null && cur.next.val == x) {
cur.next = cur.next.next;
}
} else {
cur = cur.next;
}
}
return dummy.next;
}
}
收获/亮点:文章来源:https://www.toymoban.com/news/detail-793190.html
- 虚拟节点的设置:当访问时,访问不到头结点情况时(尤其是使用
**.next.next**
最容易出现此情况),我们可知设置头结点来访问到头结点 - 当两个指针出现时,访问结束的条件一般都是两个
- if 中的循环,一般使用就是在遍历访问时,有一段循环需要特殊的处理,我们可以使用
if - while
来推进一段进程
如果大家有什么思考和问题,可以在评论区讨论,也可以私信我,很乐意为大家效劳。
好啦,今天的每日一题到这里就结束了,如果大家觉得有用,可以可以给我一个小小的赞呢,我们下期再见!文章来源地址https://www.toymoban.com/news/detail-793190.html
到了这里,关于算法每日一题: 删除排序列表中的重复元素2 | 循环 | 链表的删除 | 虚拟节点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!