1、题目描述
删除排序链表中的重复元素。
存在一个按升序排列的链表,给你这个链表的头节点 head
,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,1,2]
输出:[1,2]
2、算法分析
① 首先判断head是否为空,head.next是否为空
② 判断链表中相邻元素是否相等,相等的话,head指向head.next,指向重复元素,判断重复元素和下一个元素是否相等,继续往下
③ 判断如果链表中不相等的话,head.next 指向的是持续不相等的下一个结点
3、代码实现
/**
* 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; }
* }
*/
/*
1、链表是升序的链表,链表的头结点是head
2、删除链表中所有重复的元素,
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
// 判断头结点是否为空
if(head == null){
return null;
}
// 如果头结点下一个结点,返回null
if(head.next == null){
return head;
}
// 当相邻结点的值相等的时候,head跳过相等的值继续往右走
if(head.val == head.next.val){
head = deleteDuplicates(head.next);
// 当不相等的时候,指针往右走一个
} else{
head.next = deleteDuplicates(head.next);
}
return head;
}
}