本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接
题目描述
删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,1,2]
输出:[1,2]
示例 2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
注意
- 链表中节点数目在范围
[0, 300]内 -100 <= Node.val <= 100- 题目数据保证链表已经按升序排列
思路分析
因为是已经排序好的链表了,所以要删除该链表中的重复元素,只要对比两个值是否相等,如果相等,删掉后面的节点,还是比较简单的。
代码展示
时间复杂度是,空间复杂度是。
public ListNode deleteDuplicates(ListNode head) {
if(head == null){
return null;
}
ListNode p = head.next;
ListNode prev = head;
while(prev.next != null){
if(prev.val == p.val){
prev.next = prev.next.next;
} else {
prev = p;
}
p = p.next;
}
return head;
总结
对于这类删除节点的题目,在 while 的判断条件中往往使用的是 prev.next != null这个条件,很好用。