https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/description/
因为链表已经排好顺序,所以我们可以通过比较两个元素是否相等,来判断是否要删除这两个中的一个,如果不删除的话,就要比较下一个的两个值。还是使用遍历和递归
1.使用遍历,出循环的条件应该是至少存在2个元素(head和head.next),
class solution{
public ListNode deleteDuplicated(ListNode head){
ListNode temp = head;
while( temp != null && temp.next != null){
if(temp.next.val == temp.val){
//删除了temp.next
temp.next = temp.next.next;
}
else temp = temp.next;
}
return head;
}
}
2.使用递归,使用了一个三元符,[boolean ? a : b] 真值返回 a,假值就返回b
class solution{
public ListNode deleteDuplicates(ListNode head){
if(head == null || head.next == null) return head;
//和反转链表中的不同,感觉有可能是因为反转时候会改变head的朝向,所以才新建了一个ListNode使用递归func(head.next),要是不改变的话,就可以直接head.next = func(head.next),暂时是这样理解的,看看多做做题会不会找到规律吧
head.next = deleteDuplicates(head.next);
return head.next.val == head.val ? head.next : head;
}
}