给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
思路:这个题目是排序链表,重复出现的只保留一个。跟数组的有些类似。不同的是数组是连续空间。需要将后面的拷贝到前面。而链表只需要将节点指向改变就可以。
1、可以像数组那种采用快慢指针法去做。
2、也可以只使用一个指针,就是当前的和下一个相比,如果不同,当前的往前走一步,如果相同,当前结点指向其下一个的下一个其实就是将下一个删除掉。
public ListNode deleteDuplicates2(ListNode head) {
if(null == head || null == head.next){
return head;
}
ListNode cur = head;
ListNode pre = head;
while (null != cur && null != cur.next){
if(cur.val == cur.next.val){
pre.next = cur.next.next;
}
else{
pre = cur;
cur = cur.next;
}
}
return head;
}