题目:给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
package com.test58_LeetCode;
public class E04LeetCode83 {
//方法1,双指针
public ListNode deleteDuplicates(ListNode head){
//节点数 < 2
if(head == null || head.next == null){
return head;
}
//节点数 >=2
ListNode p1 = head;
ListNode p2;
while ((p2 = p1.next) != null){
if(p1.val == p2.val){
//删除p2
p1.next = p2.next;
//小细节,把p2的值放在循环里赋值。
}else {
//向后平移
p1 = p1.next;
//小细节,p2在下次循环时,在循环判断里进行了赋值
}
}
return head;
}
//方法2
public ListNode deleteDuplicates2(ListNode p){
if(p == null || p.next == null){
return p;
}
if(p.val == p.next.val){
return deleteDuplicates2(p.next);
}else {
p.next = deleteDuplicates2(p.next);
return p;
}
}
public static void main(String[] args) {
ListNode head = ListNode.of(1, 1, 2, 3, 3, 3);
System.out.println(head);
System.out.println(new E04LeetCode83().deleteDuplicates2(head));
}
}