LeetCodeQ19:删除倒数第n个节点

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

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

题解:

利用哑结点和双指针,让start指针先移动n个位置, 然后两个指针再一起移动,当start移动的已经为空了说明已经到了要删除节点的前一个节点, 让end指针指向它的下下一个节点即可完成删除

public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dh = new ListNode(0);
        dh.next = head;
        ListNode start = dh;
        ListNode end = dh;

        for (int i = 1; i <= n + 1; i++) {
            start = start.next;
        }
        while (start != null) {
            start = start.next;
            end = end.next;
        }
        end.next = end.next.next;
        return dh.next;
    }