一、题目要求
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
二、初步解法
2.1 初步思想
创建一个指针ptr指向head头节点。
将ptr指向的节点值和ptr.next指向的结点值进行比较,如果相同则将ptr.next从链表中删除。
如果二者不相同,取ptr.next作为新的ptr。
如果ptr为空或者ptr.next为空时,说明链表已经无重复元素,跳出循环。
2.2 代码实现
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode ptr = head;
while(ptr != null) {
if(ptr.next == null) {
break;
}
//如果出现相同ptr.next就后移
if(ptr.val == ptr.next.val) {
ptr.next = ptr.next.next;
}
//不相同ptr后移
else {
ptr = ptr.next;
}
}
return head;
}
}
2.3 运行结果
空间复杂度O(1),时间复杂度O(N)。