解法1:遍历
挨个遍历,同时保存上一个节点的值,如果当前节点的值等于上一个节点的值就删除,否则就继续遍历
import java.util.*; public class Solution { public ListNode deleteDuplicates (ListNode head) { if (head == null || head.next == null) { return head; } ListNode current = head; while (current != null && current.next != null) { if (current.val != current.next.val) { current = current.next; } else { current.next = current.next.next; } } return head; } }
解法2:递归
时间复杂度O(n)
空间复杂度是O(n):因为需要一个栈保存临时的变量next
import java.util.*; public class Solution { public ListNode deleteDuplicates (ListNode head) { if (head == null || head.next == null) { return head; } ListNode next = deleteDuplicates(head.next); if(head.val == head.next.val) { head.next = head.next.next; } return head; } }