- Posted by 微博@Yangsc_o
- 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
本题是leetcode,地址:83. 删除排序链表中的重复元素
题目
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:输入: 1->1->2->3->3
输出: 1->2->3
分析
此题跟leetcode-26-删除排序数组中的重复项解法很类似,只不过这次是链表;回顾一下上一个题的解法
快慢指针的妙用,利用两个指针i, j,初始化值为0和1,当两个指针对应的值相等时,指针j+1,继续执行循环;而当两个指针对应的值不相等时,将指针i+1,并将指针j对用的值赋值给指针i,然后指针j+1,继续向下执行循环,直到循环结束。
细节需要注意:最后慢指针是最后一个数据的索引,题目要求是返回数组的长度,所以需要 +1返回;
ListNode left = head; // 慢指针
ListNode right = head.next; // 快指针
同样的,判断两个值是否相等,即可,代码很简单
code
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode left = head;
ListNode right = head.next;
while (right != null) {
int v = right.val;
if(v == left.val) {
left.next = right.next;
} else {
left = left.next;
}
right = right.next;
}
return head;
}