题解 | #删除链表峰值#

删除链表峰值

https://www.nowcoder.com/practice/30a06e4e4aa549198d85deef1bab6d25

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @return ListNode类
#
class Solution:
    def deleteNodes(self , head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        
        #双指针删除
        dummy = ListNode(10001)
        dummy.next = head
        pre, cur = dummy, head

        #未到最后一个节点
        while cur and cur.next:
            # 如果比前后都大,则利用前后节点删除,否则指针向后移动
            if cur.val > pre.val and cur.val > cur.next.val:
                pre.next = cur.next
                cur.next = None
                cur = pre.next
            else:
                pre = cur
                cur = cur.next    
        return dummy.next
  1. 题目考察的知识点:怎样删除链表
  2. 思路:双指针法,链表题目删除节点一般要建一个伪头结点dummy, 建立两个指针,pre 和 cur分别指向前一个节点和当前节点,遍历链表,遇到前一个节点和后一个节点比当前节点大的时候,就删除掉当前节点,删除节点的重点就是把后一个节点的next指针赋值个前一个节点的next指针,当前节点的next指针置空,再把当前指针更新继续遍历,如果不符合条件,pre 和 cur都往后移动一位,最后值得注意的是伪的头结点要设成最大值,要不然会把头结点也删掉了。
  3. 本题解用的编程语言是Python3
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务