腾讯算法常见问题:删除最后一个链表的第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前端网发表,如需转载,请注明页面地址。
code前端网