19. 删除链表的倒数第 N 个节点
难度中等 1064
给定一个链表,删除链表的倒数第 n *个节点,并且返回链表的头结点。
*示例:**
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
// 借鉴 org
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy=new ListNode(0,head);//
ListNode cur=dummy;
int length=getLength(head);
for(int i=1;i<length+1-n;i++){// 1
cur=cur.next;
}
cur.next=cur.next.next;
return dummy.next;//
}
public int getLength(ListNode head){
int i=0;
while(head!=null){
head=head.next;
i++;
}
return i;
}
}