删除链表的倒数第N个节点
题目:删除链表的倒数第N个节点
问题描述:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
解决思路:
删除链表的倒数第 n 个节点即是删除链表的顺数第 (size-n+1) 个节点(size为链表的长度),所以我们可以利用快慢指针来解决此问题:先让快指针走 n 步,剩余的即可由快慢指针一起走,当快指针走到末尾时,待删除的元素就位于慢指针的下一个元素。
解决代码:
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast = head;
ListNode slow = head;
for(int i = 0; i < n; i++) {
fast = fast.next;
}
if(fast == null) {
return head.next;
}
while(fast.next != null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
}