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

    题目

    给定一个链表,删除链表的倒数第 个节点,并且返回链表的头结点。

    示例:

    给定一个链表: 1->2->3->4->5, 和 n = 2.
    
    当删除了倒数第二个节点后,链表变为 1->2->3->5.

    说明:

    给定的 n 保证是有效的。

    进阶:

    你能尝试使用一趟扫描实现吗?

    思想

    使用两个指针,第一个指针从列表的开头向前移动n + 1 个节点, 而第二个指针从列表的开头出发

    现在,这两个指针被 n 个节点分开.

    同时移动两个指针来保持这个间隔,每次向前移动一个,直到第一个指针到达最后一个节点的下个节点指向null或者nil, 此时第二个指针将指向从最后一个节点起的第 n 个节点

    然后第二个指针的next指向next->next节点即可

     代码

    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode first = dummy;
        ListNode second = dummy;
        // Advances first pointer so that the gap between first and second is n nodes apart
        for (int i = 1; i <= n + 1; i++) {
            first = first.next;
        }
        // Move first to the end, maintaining the gap
        while (first != null) {
            first = first.next;
            second = second.next;
        }
        second.next = second.next.next;
        return dummy.next;
    }
  • 相关阅读:
    Binary search tree
    搜索二叉树
    windows最基本命令行
    sublime package
    二叉树的层次遍历和其深度
    二叉树后序遍历
    PopupWindow的使用
    android之ViewPager的使用
    android部分开发摘要
    android4.0以后要求网络请求必须发生在子线程中
  • 原文地址:https://www.cnblogs.com/guohai-stronger/p/12009972.html
Copyright © 2011-2022 走看看