题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
样例
输入: 1->1->2
输出: 1->2
输入: 1->1->2->3->3
输出: 1->2->3
算法分析
-
1、如果下一个点和当前点相同,则删除下一个点
-
2、如果下一个点和当前点不同,则指针转移到下一个点
时间复杂度 $O(n)$
Java 代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode first = head;
while(first != null)
{
if(first.next != null && first.val == first.next.val) first.next = first.next.next;
else first = first.next;
}
return head;
}
}
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode p = head;
while(p != null)
{
ListNode q = p;
while(q != null && p.val == q.val) q = q.next;
p.next = q;
p = q;
}
return head;
}
}