19. Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
删除链表倒数第n个结点,n的输入有效
此种方法考虑了n 的输入无效的情况,快慢指针方法
public ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null || n < 0)
return null;
// 新建哨兵结点,防止删除头结点
ListNode tempHead = new ListNode(0);
tempHead.next = head;
ListNode cur = tempHead;
int idx = 0;
// 让一个先走n+1步,当是null 的时候。
// 另外一个正好是要删除的结点的前一个
while (idx <= n && cur != null) {
cur = cur.next;
idx++;
}
// 如果idx小,说明n大于链表的长度了
if (idx <= n)
return null;
ListNode delPre = tempHead;
while (cur != null) {
cur = cur.next;
delPre = delPre.next;
}
// n=0的情况
if (delPre.next != null)
delPre.next = delPre.next.next;
return tempHead.next;
}