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