Python删除链表中重复的结点

本文阅读 2 分钟
首页 Python笔记 正文

我们需要设置一个指针preNode,preNode最开始为None,然后设置两个指针,pNode指向当前节点,pNext指向pNode下一个结点,⓵如果pNext不为空而且pNext的值等于pNode的值,那么就说明出现了重复数字的结点,就需要删除,然后从pNode开始遍历,如果结点值等于前面那个重复值,继续遍历。当遍历到None或者不同值结点的时候,这时候需要判断preNode结点,如果preNode结点为None,就说明我们刚才的重复结点是从整个链表的头结点开始重复的,就直接把pHead设置为当前结点,pNode也设置为当前结点。反之,如果preNode不为None,直接把preNode的下一个指针指向当前节点,pNode指向preNode即可;⓶如果pNext为空或者pNext的值不等于pNode的值,说明当前的这个pNode和后面的值不重复,直接令preNode = pNode,pNode指向下一个结点即可。

  1. '''
  2. 删除链表中重复的结点
  3. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
  4. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
  5. '''
  6. # -*- coding:utf-8 -*-
  7. class ListNode:
  8. def __init__(self, x):
  9. self.val = x
  10. self.next = None
  11. class Solution:
  12. def deleteDuplication(self, pHead):
  13. if pHead == None:
  14. return
  15. preHead = None
  16. pNode = pHead
  17. while pNode != None:
  18. needDelete = False
  19. nextNode = pNode.next
  20. if nextNode != None and nextNode.val == pNode.val:
  21. needDelete = True
  22. if needDelete == False:
  23. preHead = pNode
  24. pNode = pNode.next
  25. else:
  26. nodeVal = pNode.val
  27. pToBeDel = pNode
  28. while pToBeDel != None and pToBeDel.val == nodeVal:
  29. pToBeDel = pToBeDel.next
  30. if preHead == None:
  31. pHead = pToBeDel
  32. pNode = pToBeDel
  33. continue
  34. else:
  35. preHead.next = pToBeDel
  36. pNode = preHead
  37. return pHead
  38. node1 = ListNode(1)
  39. node2 = ListNode(2)
  40. node3 = ListNode(3)
  41. node4 = ListNode(3)
  42. node5 = ListNode(4)
  43. node6 = ListNode(4)
  44. node7 = ListNode(5)
  45. node1.next = node2
  46. node2.next = node3
  47. node3.next = node4
  48. node4.next = node5
  49. node5.next = node6
  50. node6.next = node7
  51. s = Solution()
  52. print(s.deleteDuplication(node1).next.next.val)
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Python链表中环的入口结点
« 上一篇 01-21
Python二叉树的下一个结点
下一篇 » 01-21

发表评论