zoukankan      html  css  js  c++  java
  • 删除链表的倒数第n个节点

    问题描述

      leetcode 19. 删除链表的倒数第 n 个节点(倒数第1个节点表示顺数最后一个节点)

    解题思路

      可以将倒数问题,变出顺数问题来求解。先计算链表长度length,再转化为删除链表顺数第 length - n + 1 个元素

      O(n)复杂度解法:使用一次遍历即可成功

      我们可以先找到第 n 个节点 curNode,再设置一个 preNode 节点为被删除节点的前一个节点;

      从第 n 个节点开始,curNodepreNode 一起向后移动,直到 preNode 成为被删除节点的前一节点 。

     1 class Solution {
     2     public ListNode removeNthFromEnd(ListNode head, int n) {
     3         ListNode dummy = new ListNode(-1);
     4         dummy.next = head;
     5         ListNode curNode = dummy;
     6         ListNode preNode = dummy;
     7         int count = 0;
     8         while(count < n) {
     9             curNode = curNode.next;
    10             count ++;
    11         }
    12 
    13         while (curNode.next!=null) {
    14             preNode = preNode.next;
    15             curNode = curNode.next;
    16         }
    17 
    18         preNode.next = preNode.next.next;
    19         return dummy.next;
    20     }
    21 }
     
  • 相关阅读:
    微软警告:“大规模电子邮件活动”正在推动勒索软件感染
    静态莫队分块
    可持久化线段树练习题
    KMP的一些好题
    KMP模式匹配
    最大异或路径
    人类分块精华(Ex)
    人类分块精华(二)
    人类分块精华(一)
    Treap 详解
  • 原文地址:https://www.cnblogs.com/dogeLife/p/10952688.html
Copyright © 2011-2022 走看看