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

热门题,难度中等题。

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:

给定的 n 保证是有效的。

很明显,经典的双指针,就算没看过双指针相关,也应该能想到两个遍历下标保持n的距离,当快的到了终点,那么现在的就是要删除的。

要注意的一个地方就是养成考虑特殊情况的习惯,删除第一个。删除第一个的话就需要一个头指针,简化操作。

/**
 * 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 res = new ListNode(-1);
        res.next = head;
        ListNode lowNode = res;
        ListNode highNode = res;
        while (true){
            highNode = highNode.next;
            if (n > 0) --n;
            else lowNode = lowNode.next;
            if (highNode.next == null){
                lowNode.next = lowNode.next.next;
                break;
            }
        }
        return res.next;
    }
}

猜你喜欢

转载自blog.csdn.net/lfanchenyu/article/details/106538785