19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?
public class Lc19 { public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public static ListNode removeNthFromEnd(ListNode head, int n) { int len = 0; ListNode curr = head; while (curr != null) { len++; curr = curr.next; } len -= n; ListNode dummy = new ListNode(0); dummy.next = head; curr = dummy; while (len > 0) { len--; curr = curr.next; } curr.next = curr.next.next; return dummy.next; } public static void main(String[] args) { ListNode l1 = new ListNode(1); ListNode l2 = new ListNode(2); l1.next = l2; removeNthFromEnd(l1, 2); } }