剑指Offer:删除链表的节点(Python语言实现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了剑指Offer:删除链表的节点(Python语言实现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1375字,纯文字阅读大概需要2分钟。
内容图文
![剑指Offer:删除链表的节点(Python语言实现)](/upload/InfoBanner/zyjiaocheng/734/04bfa34ddadc4c419052af407bc0f320.jpg)
题目一:在O(1)时间内删除链表节点
给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
基于一个假设:要删除的节点的确在链表中。
class Solution:
def delete_node(self, head, p):
if not node or not p:
return False
if p.next:
p.val = p.next.val
p.next = p.next.next
elif head == p and p.next is None:
head.val = None
else:
ps = head
while ps.next:
if ps.next == p:
ps.next = None
break
ps = ps.next
st = Solution()
node = ListNode(3)
node.next = ListNode(4)
node.next.next = ListNode(5)
st.delete_node(node, node.next)
打破常规的思维模式:想删除一个节点时,并不一定要删除这个节点本身,可以先把下一个节点的内容复制出来覆盖被删除节点的内容,然后把下一个节点删除。
题目二:删除链表中重复的节点
在一个排序的链表中,如何删除重复的节点?
class Solution:
def delete_duplication(self, node):
if not node:
return node
pre, cur = None, node
while cur:
if cur.next and cur.val == cur.next.val:
val = cur.val
while cur and cur.val == val:
cur = cur.next
if not pre:
node = cur
else:
pre.next = cur
else:
pre = cur
cur = cur.next
return node
st = Solution()
node = ListNode(1)
node.next = ListNode(1)
node.next.next = ListNode(2)
node.next.next.next = ListNode(3)
node.next.next.next.next = ListNode(3)
node.next.next.next.next.next = ListNode(4)
node.next.next.next.next.next.next = ListNode(5)
node.next.next.next.next.next.next.next = ListNode(5)
head = st.delete_duplication(node)
(最近更新:2019年07月16日)
内容总结
以上是互联网集市为您收集整理的剑指Offer:删除链表的节点(Python语言实现)全部内容,希望文章能够帮你解决剑指Offer:删除链表的节点(Python语言实现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。