美文网首页
19. 删除链表的倒数第N个节点

19. 删除链表的倒数第N个节点

作者: 卡尔书院 | 来源:发表于2020-07-19 22:27 被阅读0次

    题目

    中文题目
    英文题目

    分析 : (斜体是被推翻或者舍弃的 , 黑体是斜体的替代办法)

    • 一次遍历 , 我们可以使用双指针 , 快指针与慢指针相差 n 个节点 , 当快指针到达末尾时 , 慢指针就指向需要删除的节点的前一个节点 , 进行删除即可
    • 写代码时发现快指针(即前指针)先走(n+1)次更好 , 比如链表有两个元素 , 删除倒数第二个节点时快节点其实最多只能走一次
    • 若要删除头结点 , 就必须建立一个辅助节点 , 快指针先走(n+1)次

    正确代码 :

    /*
     * @lc app=leetcode.cn id=19 lang=java
     *
     * [19] 删除链表的倒数第N个节点
     */
    
    // @lc code=start
    
    // //Definition for singly-linked list.
    // class ListNode {
    //      int val;
    //      ListNode next;
    //      ListNode(int x) { val = x; }
    // }
    
    class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            ListNode secondaryNode = new ListNode(-1);
            secondaryNode.next = head;  //创建辅助节点
            ListNode fasNode = secondaryNode;
            ListNode sloNode = secondaryNode;   //快慢节点
            for (int i = 0; i < (n+1); i++) {   //快节点先走
                fasNode = fasNode.next;
            }
            while(fasNode != null){ //两指针等距遍历
                fasNode = fasNode.next;
                sloNode = sloNode.next;
            }
            sloNode.next = sloNode.next.next;   //删除
    
            return secondaryNode.next;
        }
    }
    // @lc code=end
    
    
    
    

    问题 :

    占用空间较大

    相关文章

      网友评论

          本文标题:19. 删除链表的倒数第N个节点

          本文链接:https://www.haomeiwen.com/subject/boorkktx.html