给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
解法:
这个方法能够返回一个head,引领着一个不重复的链表;
如果输入的head是null或者只有一个head,则输出head
如果至少存在两个结点:
(1)head和next的值不等【这个head可以要】,head.next=deleteDuplicates(next)
(2)head和next的值相等【这个head不能要】,向后移动next直到next的值和head不同,或者next为null,head = deleteDuplicates(next)
public ListNode deleteDuplicates(ListNode head) {// 次方法能够返回一个head这个head引领着一串不重复的链表
if (head == null || head.next == null) {
return head;
}
// 说明至少有两个结点
ListNode next = head.next;
if (head.val != next.val) {
head.next = deleteDuplicates(next);// 递归
} else {// 说明head和next的值相同,需要改变head这个变量名的指向
while (next != null && head.val == next.val) {
next = next.next;
}
head = deleteDuplicates(next);
}
return head;
}