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

知乎ID: 码蹄疾

码蹄疾,毕业于哈尔滨工业大学。

小米广告第三代广告引擎的设计者、开发者;

担任小米运用市肆、日历、开屏广告业务线研发;

主导小米广告引擎多个模块重构;

关注引荐、搜刮、广告范畴相干学问;

问题

给定一个链表,删除链表的倒数第 n 个节点,而且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变成 1->2->3->5.
申明:
给定的 n 保证是有用的。
进阶:
你能尝试运用一趟扫描完成吗?

剖析

链表的问题基本上都是优先斟酌双指针。一个指针先走N步,然后两个指针同步移动到链表末端,移除前一个指针所指着的节点即可。然则越简朴的问题越要斟酌边界条件,不要掉坑内里,详细看代码吧,争夺一次Bugfree.

Code

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode right = head;
        ListNode left = head;
        for (int i = 0; i < n; i++) {
            right = right.next;
        }
        
        if (right == null) {
            head = head.next;
            return head;
        }
        while (right.next != null) {
            left = left.next;
            right = right.next;
        }
        left.next = left.next.next;
        return head;
    }
}

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

微信扫码关注更多题解!

    原文作者:Acceml
    原文地址: https://segmentfault.com/a/1190000015561288
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞