描述
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例
样例 1:
输入: null
输出: null
样例 2:
输入: 1->1->2->null
输出: 1->2->null
样例 3:
输入: 1->1->2->3->3->null
输出: 1->2->3->null
代码描述
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param head: head is the head of the linked list
* @return: head of linked list
*/
public ListNode deleteDuplicates(ListNode head) {
// write your code here
if(head==null)return null;
if(head.next==null)return head;
ListNode ans=head;
ListNode pre=head;
head=head.next;
Set set=new HashSet();
set.add(pre.val);
while(head!=null){
if(set.contains(head.val)){
pre.next=head.next;
head=head.next;
continue;
}
set.add(head.val);
pre=head;
head=head.next;
}
return ans;
}
}
补充说明
这个代码感觉写得有点冗长,思路很简单,用set存链表中的元素;若遇到重复元素,则当前节点的前一个节点指向当前节点的后一个节点,并将当前节点移向后一个节点。否则,当前节点的前一个节点和当前节点分别后移。