LeetCode刻意练习8--删除排序链表中的重复元素

删除排序链表中的重复元素

在这里插入图片描述
题目:在这里插入图片描述
注意:这道题由于已经被排好序,所以简单许多,如果没有注意到已经是排序好的,会将问题复杂化。

思路:
1.考虑特殊情况:假如给定单链表为空或只有一个元素,那么直接返回该单链表。
2.一般情况:定义一个指针(ptr)指向单链表的头结点,这样方便我们后续对单链表进行删除工作。因为该链表已经是排序过的,所以重复的元素只可能相邻,因此我们直接比较相邻两个数直接是否重复。
(1)重复,删除该结点。
(2)不重复,指针后移,继续对剩下部分进行相同操作,直到单链表遍历结束。

   	public ListNode deleteDuplicates(ListNode head)
	{
		if(head==null||head.next==null)
			return head;
		ListNode ptr=head;
		while(ptr.next!=null)
		{
			if(ptr.val==ptr.next.val)
				ptr.next=ptr.next.next;
			else
				ptr=ptr.next;
		}
		return head;
	}

扩展:
假如给定链表不是排序好的,那么,重复元素不一定会在相邻位置 。一种比较容易想到的思路是双重循环。时间复杂度是O(n2)。另一种思路是先将链表排序O(nlogn),再合并。

发布了49 篇原创文章 · 获赞 2 · 访问量 889

猜你喜欢

转载自blog.csdn.net/qq_43720551/article/details/104725995