给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
// return deleteDuplicatesI(head);
return deleteDuplicatesII(head);
}
//方法二:快慢指针
//当快慢指针值相等时,移动快指针直到遇到不相等元素,将慢指针指向不相等元素
//时间复杂度O(N),空间复杂度O(1)
private ListNode deleteDuplicatesII(ListNode head) {
ListNode slow = head, fast = head;
while (fast != null) {
if (slow.val != fast.val) {
slow.next = fast;
slow = slow.next;
}
fast = fast.next;
}
//断开慢指针与重复元素的连接
slow.next = null;
return head;
}
//方法一:遍历链表,跳过重复的元素
//时间复杂度O(N),空间复杂度O(1)
private ListNode deleteDuplicatesI(ListNode head) {
ListNode cur = head;
while (cur != null && cur.next != null) {
if (cur.val == cur.next.val) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return head;
}
}