给定一个有序链表,删除重复元素,保证每一个元素只出现一次
Example 1:
Input: 1->1->2 Output: 1->2Example 2:
Input: 1->1->2->3->3 Output: 1->2->3
1:时间复杂度O(n),借助另外一个链表
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return None
head_list = ListNode(0) #头指针,不动
cur_List = head_list #当前指针
cur_List.next = ListNode(head.val) #指针移动
cur_List = cur_List.next
head = head.next #head链表移动
while head: #遍历head链表
if head.val != cur_List.val:
cur_List.next = ListNode(head.val)
cur_List = cur_List.next
head = head.next
return head_list.next
2:时间复杂度O(n),不借助另外链表
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return None
cur_List = head
while cur_List.next:
if cur_List.val == cur_List.next.val:
cur_List.next = cur_List.next.next
else:
cur_List = cur_List.next
return head
算法题来自:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/description/
本文介绍两种删除有序链表中重复元素的方法:一种使用额外链表实现,时间复杂度为O(n);另一种直接在原链表上操作,同样达到O(n)的时间复杂度。这两种方法都能确保链表中的每个元素只出现一次。
338





