python删除链表中重复的节点_剑指offer:删除链表中重复的节点
題目描述
在一個排序的鏈表中,存在重復的結(jié)點,請刪除該鏈表中重復的結(jié)點,重復的結(jié)點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def deleteDuplication(self, head):
"""
給定一個有序的鏈表,刪除所有重復的節(jié)點
"""
# 我們先設置一個輔助節(jié)點
# begin用來定位在返回鏈表的頭節(jié)點的前一個節(jié)點(輔助節(jié)點)上
# pre_node用來定位返回鏈表的尾節(jié)點
begin = pre_node = ListNode(0)
while head:
c = 0 # 當前值出現(xiàn)的次數(shù),初始化為0可以使后續(xù)代碼更簡潔
val = head.val # 當前值
# 記錄當前節(jié)點,因為無論如何,head都會往前移動一次,當下面這個while退出之后,
# cur != head
cur = head
# 當前值連續(xù)出現(xiàn)的次數(shù)
while head and head.val == val:
c += 1
head = head.next
# 如果當前值只連續(xù)出現(xiàn)過1次,說明不是重復節(jié)點,需要將當前節(jié)點添加到鏈表的末尾
# 由于pre_node是定位尾節(jié)點的,所以每次添加一個尾節(jié)點的時候,需要將原尾節(jié)點(pre_node)
# 和新的尾節(jié)點連接起來,然后將pre_node重新定位到鏈表的尾節(jié)點
if c == 1:
pre_node.next = cur
pre_node = pre_node.next
# 當遍歷完整個鏈表之后,注意要將尾節(jié)點與Null連接起來
pre_node.next = None
# begin在頭節(jié)點的前一個節(jié)點(輔助節(jié)點)上,因此返回begin.next
return begin.next
總結(jié)
以上是生活随笔為你收集整理的python删除链表中重复的节点_剑指offer:删除链表中重复的节点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 域名注册商标_科技述说:一起了解网络域名
- 下一篇: python tableview绑定字典