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