问题系列之Java中删除有序List的重复数据——提供两种方法

时间:2022-04-29
本文章向大家介绍问题系列之Java中删除有序List的重复数据——提供两种方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Java学习网(www.javalearns.com)提拱

现在给出一个有序的List,删除其中重复的元素,要求第个元素只能出现一次,并且是经过的排序的;

网络配图

比如:

给出 2->2->3,返回 2->3;

给出 2->2->3->5->5,返回 2->3->5;

要解决这个问题,首先要分析问题,找出问题的关键因素;经过分析我们可以知道要实现这个需求,必须使用循环语句配合正确的条件。下面提供了2种解决方案:

先定义一个基础类(2个方法都用到此类):

class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}

方法一、

public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode prev = head;
ListNode p = head.next;
while (p != null) {
if (p.val == prev.val) {
prev.next = p.next;
p = p.next;
prev = p;
p = p.next;
}
}
return head;
}

}

网络配图

方法二、

public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode p = head;
while (p != null && p.next != null) {
if (p.val == p.next.val) {
p.next = p.next.next;
} else {
p = p.next;
}
}
return head;
}
}