java练习(27)
ps:练习来自力扣
删除排序链表中的重复元素
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
代码来自官方题解
class Solution {
public ListNode deleteDuplicates(ListNode head) {
// 首先检查链表是否为空,如果为空,直接返回 head(也就是 null)
// 因为空链表不存在重复元素,无需进行删除操作
if (head == null) {
return head;
}
// 定义一个指针 cur,初始时指向链表的头节点 head
// 后续我们会通过移动 cur 指针来遍历链表
ListNode cur = head;
// 使用 while 循环来遍历链表,只要 cur 的下一个节点不为空,就继续循环
while (cur.next != null) {
// 比较当前节点 cur 的值和它下一个节点 cur.next 的值
if (cur.val == cur.next.val) {
// 如果两个节点的值相等,说明这两个节点是重复的
// 此时我们将 cur 的 next 指针指向 cur.next 的下一个节点
// 也就是跳过 cur.next 这个重复节点,相当于删除了它
cur.next = cur.next.next;
} else {
// 如果两个节点的值不相等,说明当前节点和下一个节点不是重复节点
// 此时将 cur 指针移动到下一个节点,继续往后遍历链表
cur = cur.next;
}
}
// 当遍历完整个链表后,所有重复的节点都已经被删除
// 最后返回链表的头节点 head,此时链表中每个元素只出现一次
return head;
}
}