public class ListNode {
int val;
LeetCode_21.ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, LeetCode_21.ListNode next) { this.val = val; this.next = next; }
}
1.循环遍历
时间复杂度O(n)
空间复杂度O(1)
public ListNode deleteDuplicates(ListNode head){
if(head == null){
return head;
}
ListNode currentNode = head;
while (null!=currentNode.next){
if(currentNode.next.val == currentNode.val){
currentNode.next = currentNode.next.next;
}else{
currentNode = currentNode.next;
}
}
return head;
}
2.递归
本质就是将链表压栈后倒序处理了
时间复杂度O(n)
public ListNode deleteDuplicates(ListNode head){
if(head == null || head.next ==null){
return head;
}
head.next = deleteDuplicates(head.next);
return head.val == head.next.val? head.next : head;
}