删除排序链表中的重复元素
删除排序链表中的重复元素
题目链接
题目描述
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 1:
输入:head = [1,1,2]
输出:[1,2]示例 2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]提示:
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序 排列
题目解法
分析:链表是已经排好序的,相同的元素的位置肯定是连续的,把链表遍历,判断相邻的两个元素是否相等,相等就删了后一个元素,不相等就把当前位置指向下一个元素的位置。
时间复杂度O(n)
public ListNode deleteDuplicates(ListNode head) {
if(head == null) {
return head;
}
ListNode node = head;
while (node.next != null) {
if(node.val == node.next.val) {
node.next = node.next.next;
}else {
node = node.next;
}
}
//为什么返回head,而不是返回node呢?因为是值传递,node值改变,head值也跟着改变,head在头部不动,node已经移到最后
return head;
}
/**
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
*/