腾讯常考十道算法真题:删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 :
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
这道题可以使用双指针解决。既然我们要找到倒数第n
个节点,我们可以使用两个指针first 和 second
同时对链表进行遍历,并且first 比second
超前 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;
}
}
THE END