题目描述
blablabla
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def deleteDuplication(self, head):#自己AC的题目
"""
:type head: ListNode
:rtype: ListNode
"""
x = head#为该链表“搞一个指针”,x也就是这个head了
y = x#同理y也是这个head了
if(head==None):return None #如果为空的话返回0;
tag = 0#标记
if(head.val == head.next.val):
tag=1#标记开头就是重复的数字的情况
#以下x和y可以对掉。
while(head.next):
if(head.val == head.next.val):#第一种情况:遇到前后相同的
while(head.next and head.val == head.next.val):#遍历这段相同的直到next为空(即最后一个节点)或者前后不相同了
head = head.next
if(head.next):#如果是因为前后不相同了退出的循环,则
head = head.next#遍历到下一个
y.next = head#然后y接上这个
else:
y.next = None#如果是因为next为空退出了循环,说明到了最后,直接接上None就行了。
break#然后这时候要退出循环了
else:#第二种情况就是没遇到前后相同的,就一直连接不要断
y = head#y不断改变,y保持是遇到相同的前面一段的最后一个节点
head = head.next#这里有个隐含义:y改变了,x也就改变了
if(tag==1):
return x.next#开头就是重复的数字的情况,执行了上面的代码后肯定留下最开头那个,然后就这样处理即可
return x