zoukankan      html  css  js  c++  java
  • 【LeetCode】019. Remove Nth Node From End of List

    描述:删除单链表的倒数第n个节点

    分析:

    • 主要思路是用两个指针遍历单链表,先让右指针前进n个节点,然后再让两个指针同步前进,这样右指针到达表尾null的时候,左指针的下一个即是要删除的节点
        for (int i = 1; i <= n + 1; i++) {
            right = right.next;
        }
    
        for (; right != null; right = right.next) {
            left = left.next;
        }
    
    • 为了消除第一个节点的特殊性,用一个头节点指向它
        ListNode ahead = new ListNode(0);
        ahead.next = head;
    
    • 删除节点
        left.next = left.next.next;
    

    完整实现:

    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode ahead = new ListNode(0);
        ahead.next = head;
    
        ListNode left = ahead;
        ListNode right = ahead;
    
        for (int i = 1; i <= n + 1; i++) {
            right = right.next;
        }
    
        for (; right != null; right = right.next) {
            left = left.next;
        }
    
        left.next = left.next.next;
        return ahead.next;
    }
  • 相关阅读:
    roadmap
    Tree and Permutation
    码队的新桌游
    关于优先队列重载运算符
    YJJ's Salesman
    E. Natasha, Sasha and the Prefix Sums
    C. Anna, Svyatoslav and Maps
    D1. Kirk and a Binary String (easy version)
    C. Almost Equal
    D. Shortest Cycle
  • 原文地址:https://www.cnblogs.com/hippiebaby/p/5501045.html
Copyright © 2011-2022 走看看