递归解决方案
public ListNode deleteDuplicates(ListNode head) {
if (head==null) return null;
ListNode newhead = deleteDuplicates(head.next);
if (newhead==null) return head;
if(head.val== newhead.val) head = newhead;
else head.next = newhead;
return head;
}
- 确信newhead保存了后续结点正确处理后的结果
- 判断newhead是否为null,如果为null直接返回
- 再判断newhead与head的val是否相同
- true:head直接指向newhead
- false:head.next指向newhead
- 返回head
- 设置递归终止条件
- 问题解决
其他解决方案
public ListNode deleteDuplicates(ListNode head) {
ListNode newhead = head,temp = head;
while (head!=null){
if(head.val!= temp.val){
temp.next = head;
temp = temp.next;
}
head = head.next;
}
if(temp!=null) temp.next=null;
return newhead;
}
- 设置两个变量,newhead作为返回值,指向不变,temp用于循环保存不重复结点
- 循环中,head移动,同时判断是否符合条件,符合则添加temp
- 由于head中结点并未删除,故如果最后一个temp.next不为空,则后续结点并不会删除,故需要在循环外删除尾部重复结点
- 注意:head并未进行判空,故temp可能为空,故需要对temp进行判断后再删除
- 返回newhead