19. 删除链表的倒数第N个节点

难度中等1064
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode() {}
  7. * ListNode(int val) { this.val = val; }
  8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12. // 借鉴 org
  13. public ListNode removeNthFromEnd(ListNode head, int n) {
  14. ListNode dummy=new ListNode(0,head);//
  15. ListNode cur=dummy;
  16. int length=getLength(head);
  17. for(int i=1;i<length+1-n;i++){// 1
  18. cur=cur.next;
  19. }
  20. cur.next=cur.next.next;
  21. return dummy.next;//
  22. }
  23. public int getLength(ListNode head){
  24. int i=0;
  25. while(head!=null){
  26. head=head.next;
  27. i++;
  28. }
  29. return i;
  30. }
  31. }