最近突然有些喜欢制作干花标本了
觉得能以另外一种方式将短暂的生命长久的保存住
还是挺神奇的
虽然手段有些残忍哈
发两张样本给大家瞧瞧
准备再从网上买些塑料薄片将这些花给固定住
这样就可以保存更长时间了
83- 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
思路:
本题还是相对简单的,对于链表问题,我始终喜欢先将链表上每个节点的值保存到一数组中,我们再根据题目的要求对该数组进行处理操作。因为数组有很多相关的内置函数可以使用,所以我们对数组操作也相对简单。本题亦是如此,首先采用的是双指针法。定义左右指针,左指针用来记录最终链表的连接关系;右指针用来记录给定head链表的移动关系。只要有相同元素出现,则右指针右移,而左指针不动;如果连续的两个元素不相等,则左右指针均要移动。
代码如下:
class Solution(object):
# 本题采用的是双指针法。定义左右指针,左指针用来记录最终链表的连接关系;右指针用来记录给定head链表的移动关系
# 只要有相同元素出现,则右指针右移,而左指针不动;如果连续的两个元素不相等,则左右指针均要移动
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None:
return head
# 定义dummy指针指定最终要返回的链表
dummy = ListNode(0)
# 指定head做dummy链表的右指针
dummy.next = head
# 指定dummy_copy做dummy链表的左指针
dummy_copy = dummy
# 指定last_num用来保存head链表最后一个节点的值
last_num = 0
while head:
if head.next and head.val != head.next.val:
dummy_copy.next = ListNode(head.val)
dummy_copy = dummy_copy.next
if head.next is None:
last_num = head.val
head = head.next
# 最后别忘了将head链表最后一个节点的值赋值给dummy_copy链表
dummy_copy.next = ListNode(last_num)
return dummy.next
if __name__ == "__main__":
head_list = [2]
head = ListNode(0)
head_copy = head
for index in head_list:
head_copy.next = ListNode(index)
head_copy = head_copy.next
new_head = Solution().deleteDuplicates(head.next)
print(new_head)
不过执行效率比较差,在10%左右。各位读者要是有更好的方法还请多多分享啊!