当前位置:首页 > 编程笔记 > 正文
已解决

力扣.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%的人还看了

猜你感兴趣

版权申明

本文"力扣.82删除链表中的重复元素(java语言实现)":http://eshow365.cn/6-39942-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!