25_LeetCode 82&83. Remove Duplicates from Sorted List(II) (Python详解及实现)
2017-08-09 11:18
671 查看
【题目】83
Given a sorted linked list, delete allduplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return1->2->3.
给定一个有序链表,删除重复元素,每个元素只允许出现一次
【思路】
82题是83题的升级版,做82题前防先看下83题
设立虚表头pummy 这样处理Linked List方便一些
p.next始终指向待比较的元素, 如果遇到了重复元素:p不动,p.next变化;如果没有遇到重复元素,则p=p.next
【Python实现】
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
prev = ListNode(0)#创建一个结点
prev = head
p = head.next
while p:
if p.val == prev.val:#如果前一个结点值与后一个相等
prev.next = p.next#前一个结点指向p的下一个结点
p = p.next#
else:
prev = p
p = p.next
return head
if __name__ == '__main__':
nums= [3, 1]
target = 1
S = Solution1()
S.search(nums,target)
下面看82题:83题的升级版
Given a sorted linked list, delete allnodes that have duplicate numbers, leaving only distinct numbers from theoriginal list.
For example,
Given1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return2->3.
给你定一个排好序的链表,将所有重复的节点去掉。比如:给出1->2->3->3->4->4->5, 返回1->2->5.
判断是重复的结点就直接移到下一位。
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
dummy = ListNode(0)
dummy.next = head
p = dummy
tmp = dummy.next#要判断的第一个数据,也就是head数据
while p.next:
while tmp.next and tmp.next.val == p.next.val:
tmp = tmp.next#tmp下移判断是否仍相等
if tmp == p.next:
p = p.next
tmp = p.next
else:#删除重复点
p.next = tmp.next
return dummy.next
Given a sorted linked list, delete allduplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return1->2->3.
给定一个有序链表,删除重复元素,每个元素只允许出现一次
【思路】
82题是83题的升级版,做82题前防先看下83题
设立虚表头pummy 这样处理Linked List方便一些
p.next始终指向待比较的元素, 如果遇到了重复元素:p不动,p.next变化;如果没有遇到重复元素,则p=p.next
【Python实现】
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
prev = ListNode(0)#创建一个结点
prev = head
p = head.next
while p:
if p.val == prev.val:#如果前一个结点值与后一个相等
prev.next = p.next#前一个结点指向p的下一个结点
p = p.next#
else:
prev = p
p = p.next
return head
if __name__ == '__main__':
nums= [3, 1]
target = 1
S = Solution1()
S.search(nums,target)
下面看82题:83题的升级版
Given a sorted linked list, delete allnodes that have duplicate numbers, leaving only distinct numbers from theoriginal list.
For example,
Given1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return2->3.
给你定一个排好序的链表,将所有重复的节点去掉。比如:给出1->2->3->3->4->4->5, 返回1->2->5.
判断是重复的结点就直接移到下一位。
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
dummy = ListNode(0)
dummy.next = head
p = dummy
tmp = dummy.next#要判断的第一个数据,也就是head数据
while p.next:
while tmp.next and tmp.next.val == p.next.val:
tmp = tmp.next#tmp下移判断是否仍相等
if tmp == p.next:
p = p.next
tmp = p.next
else:#删除重复点
p.next = tmp.next
return dummy.next
相关文章推荐
- LeetCode 95 Unique Binary Search Tree II(Python详解及实现)
- LeetCode 92 Reverse Linked List II (Python详解及实现)
- 【leetCode】House Robber II python实现
- LeetCode 66 Plus One (Python详解及实现)
- LeetCode 64 Minimum Path Sum(Python详解及代码实现)
- LeetCode 72 Edit Distance(Python详解及实现)
- LeetCode 55 Jump Game(Python 实现及详解)
- leetcode 【 Find Minimum in Rotated Sorted Array II 】python 实现
- LeetCode 76 Minimum Window Substring(Python详解及实现)
- LeetCode 80 Remove Duplicates from Sorted Array II (Python详解及实现)
- LeetCode 70 Climbing Stairs(Python详解及实现)
- LeetCode 81 Search in Rotated Sorted Array II (Python详解及实现)
- leetcode 【 Remove Duplicates from Sorted List II 】 python 实现
- LeetCode 77 Combinations (Python详解及实现)
- LeetCode 73 Set Matrix Zeroes(Python详解及实现)
- leetcode 【 Reverse Linked List II 】 python 实现
- LeetCode 61. Rotate List(Python详解及实现)
- LeetCode 74 Search a 2D Matrix(Python详解及实现)
- 【leetCode】Path Sum II python实现
- LeetCode 75 SortColor(Python详解及实现)