leetcode-链表系列-链表去重(leetcode 83)

83. 删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

题解:
列表去重,一般区分有序数组还是无序数组,
针对有序链表的去重,可以采用双指针中的快慢指针, 当快指针不等于慢指针时,
将快指针的值赋值于慢指针,慢指针向前移动一位
注意:有序链表的去重和有序数组的去重方法一样

不管是有序数组还是无序数组,可以采用下面方法:
先申请一个列表,然后遍历链表
判断当前元素是否在列表中,如果不在列表中,
则先将这个元素添加到列表中,并将这个Node添加到不重复的列表中

代码:
def unorder_linked_array_duplicates(header):
mov = LinkedNode(0)
dict_mov = mov
record_node = []

while header is not None:
if header.val not in record_node:
record_node.append(header.val)
dict_mov.next = header
dict_mov = dict_mov.next
header = header.next
return mov.next


def ordered_linked_list_duplicates(header):
mov = header
slow = mov
quick = mov.next
while quick is not None:
if slow.val != quick.val:
slow.next = quick
slow = slow.next
quick = quick.next
return mov
原文地址:https://www.cnblogs.com/tomorrow-hope/p/15481490.html