原题链接:
https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/
题意理解
从一个链表中删除倒数第n个元素
我的想法是,删除倒数第n个元素,实际上是找倒数第n+1个元素,然后删除其后面一个元素。然后此时就是经典的双指针解法了。实际上第n+1个元素不一定存在,所以可以在前面开一个虚拟节点,最后返回虚拟节点的后一个节点。
我的代码
/**
* 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 l1 = new ListNode(-1);
l1.next = head;
ListNode result = l1;
ListNode l2 = l1;
n++;
while(n-->0) {
l2 = l2.next;
}
while(l2 != null) {
l1 = l1.next;
l2 = l2.next;
}
l1.next = l1.next.next;
return result.next;
}
}