56. 删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
在遍历的时候,记录上一个不重复的节点pPre,当前节点pThis,下个节点pNext。在遍历pThis的时候如果当前节点pThis的值跟后面的几个节点数值相同,需要找到下个不同的节点,删除重复节点,更新pPre和pThis;如果前节点pThis的值跟后面的节点数值不同,直接更新pPre和pThis。
如果pHead就是重复的,需要更新pHead。
代码实现
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplication(self, pHead):
# write code here
if pHead == None or pHead.next == None:
return pHead
pPre = None
pThis = pHead
pNext = None
while(pThis):
if(pThis.next and pThis.next.val == pThis.val):
pNext = pThis.next
while(pNext.next and pNext.next.val == pThis.val):
pNext = pNext.next
if(pThis == pHead):
pHead = pNext.next
else:
pPre.next = pNext.next
pThis = pNext.next
else:
pPre = pThis
pThis = pThis.next
return pHead
京公网安备 11010502036488号