一、题目
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
二、示例
输入:head = [1,1,2]
输出:[1,2]
代码实现
链表节点
public class ListNode {
int val;
ListNode next;
ListNode(){}
ListNode(int val){
this.val = val;
}
ListNode(int val, ListNode listNode) {
this.val = val;
this.next = listNode;
}
}
递归
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;
}
时间和空间情况
循环方式
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next ==null ){
return head;
}
ListNode p = head;
while(p.next!= null) {
if(p.val == p.next.val) {
p.next= p.next.next;
} else {
p = p.next;
}
}
return head;
}
时间和空间情况
暴力破解法
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return head;
}
List<Integer> list = new ArrayList<>();
ListNode p = head;
while (p!= null) {
if (!list.contains(p.val)) {
list.add(p.val);
}
p = p.next;
}
head = new ListNode(0);
p = head;
for (Integer integer : list) {
p.next = new ListNode(integer);
p = p.next;
}
return head.next;
}
时间和空间情况