83.删除排序链表中的重复元素Java
题目描述
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
输入输出样式
示例1:
输入:head = [1,1,2]
输出:[1,2]
示例2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
本文题来自LeetCode:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
思路
用两个指针low = head和high = head.next 从头遍历链表,同时比较low和high的val值大小。相同则high后移并且将low.next = high (相当于删除中间相等的值);不同则low和high都后移一位,直到high为空则说明到达链尾。
算法分析
时间复杂度O(n),空间复杂度为O(1)
求解函数
public ListNode deleteDuplicates(ListNode head) {
//如果链表为空或者只有一个节点则直接返回
if (head == null || head.next == null) return head;
ListNode low = head, high = head.next;
while (high != null) {
if (low.val == high.val) {
high = high.next;
low.next = high;
}
else {
low = low.next;
high = high.next;
}
}
return head;
}