已解决
力扣.82删除链表中的重复元素(java语言实现)
来自网友在路上 11118111提问 提问时间:2023-11-20 03:30:27阅读次数: 111
最佳答案 问答题库1118位专家为你答疑解惑
Problem: 82. 删除排序链表中的重复元素 II
文章目录
- 思路
- 解题方法
- 复杂度
- Code
思路
思路类似83题的常规解法和建立虚拟头节点的结合,不同的是本题目要删去所有重复节点,为解决该问题我们再次利用虚拟头节点和尾指针,遍历时若遇到当当前节点值和其下一个节点值相等时则说明已经出现重复,则时再次通过循环遍历加上指针的移动操作达到去除所有重复的节点值的目的
解题方法
1.建立虚拟头节点,尾指针指向创建的虚拟头节点(便于解决原始待删除的链表头部就出现重复值的情况)
2.循环退出条件为tail.next != null && tail.next.next != null(假设tail为定义的尾节点)
3.当出现tail.next.val == tail.next.next.val时表示出现重复,用一个指针(名为noReptition )通过循环遍历,退出条件为noReptition != null && noReptition.val == tail.next.val,然后让tail.next将noReptition指向的节点;若不出现重复,则直接迭代遍历
4.返回虚拟头节点的下一个节点。
复杂度
- 时间复杂度:
O ( n ) O(n) O(n)
- 空间复杂度:
O ( 1 ) O(1) O(1)
Code
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {//Time Complexity: O(n)//Space Complexity: O(1)public ListNode deleteDuplicates(ListNode head) {if (head == null) return null;ListNode dummyNode = new ListNode(Integer.MAX_VALUE,head);ListNode tail = dummyNode;while (tail.next != null && tail.next.next != null) {//出现重复if (tail.next.val == tail.next.next.val) {ListNode noReptition = tail.next;while (noReptition != null && noReptition.val == tail.next.val) {noReptition = noReptition.next;}tail.next = noReptition;} else {tail = tail.next;}}return dummyNode.next;}
}
查看全文
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)
- 代码随想录二刷 | 链表 | 删除链表的倒数第N个节点
- 节点导纳矩阵
- bhosts 显示节点 “unreach“ 状态
- 电子电器架构 —— 车载网关边缘节点总线转换
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 第四天||24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
- CS224W5.1——消息传递和节点分类
- Vue报错解决Error in v-on handler: “Error: 无效的节点选择器:#div1“
猜你感兴趣
版权申明
本文"力扣.82删除链表中的重复元素(java语言实现)":http://eshow365.cn/6-39942-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 阿坤老师的独特瓷器(Java详解)
- 下一篇: 2、LeetCode之两数相加