题目:

算法思想:
设置两个指针,一个快指针在前面,一个慢指针在后面,快指针提前走N步,然后两个指针同时走,这样的话,刚好快指针走到最后的时候,慢指针指向的是倒数第n个结点的前一个结点。
代码:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode headNode = new ListNode(-1);
headNode.next = head;
ListNode firstNode = headNode; //快指针
ListNode secondNode = headNode; // 慢指针
for(int i = 0; i < n; i++) {
firstNode = firstNode.next;
}
while(firstNode.next != null) {
firstNode = firstNode.next;
secondNode = secondNode.next;
}
System.out.println(firstNode.val);
System.out.println(secondNode.val);
secondNode.next = secondNode.next.next;
return headNode.next;
}
}
该代码实现了一个方法,使用双指针技巧,先让快指针移动N步,然后两个指针同步移动,当快指针到达链表末尾时,慢指针正好指向倒数第N个节点的前一个节点,从而能有效地删除指定位置的节点。

被折叠的 条评论
为什么被折叠?



