Code前端首页关于Code前端联系我们

腾讯算法常见问题:删除最后一个链表的第n个节点

terry 2年前 (2023-09-27) 阅读数 69 #数据结构与算法

获取一个链表,删除链表中最后一个的第n个节点,返回链表的根节点。 腾讯常考十道算法真题:删除链表的倒数第 N 个结点

示例:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

这个问题可以通过使用双指针来解决。由于我们要找到倒数第二个节点n,所以可以使用两个指针first和second同时遍历链表,并且first在第二个之前 n 节点。当first移动到链表末尾时,second正好位于从底部算起的节点n处。

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0, head);
        ListNode first = head;
        ListNode second = dummy;
        //first 比second先走n个节点
        for (int i = 0; i < n; ++i) {
            first = first.next;
        }
        //直到走到链表尾部
        while (first != null) {
            first = first.next;
            second = second.next;
        }
        //删除节点
        second.next = second.next.next;
        ListNode ans = dummy.next;
        return ans;
    }
}

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门