给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
思路
因为是排好序的链表,所以相同的元素必然相邻
遍历链表,用N表示当前元素,M指向N的下一个元素,如果M.next.val==M.val,
便将M向后移动,直至M.val发生变化。可以通过判断N.next是否等于M来判断M是否移动
如果M发生了移动,便表示N与M之间为重复数字,N.next=M,将中间的重复数字全部舍弃
如果没有与M的值相等的元素,则不进行其他操作,N=N.next
代码
def deleteDuplicates(self, head):
if(head==None or head.next==None):return head
N=ListNode(0)
N.next=head
head=N
while N!=None and N.next!=None:
M=N.next
while M!=None and M.next!=None and M.val==M.next.val :
M=M.next
if M!=N.next:N.next=M.next#移动过表示N和M之间是重复元素,全部舍弃
else:N=N.next#否则正常移动
return head.next