【题目】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