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.
Original question link: https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/
Question: Given a linked list, delete the nth node from the end and return a new linked list.
Idea: Use two pointers: fast and slow. The distance between them is N. So when fast ends to the end, the node where N is located is the node to be deleted.
public ListNode removeNthFromEnd(ListNode head, int n) {ListNode slow = head, fast = head;if (head.next == null)return null;for (int i = 1; i <= n; i++)slow = slow.next;if (slow == null) {head = head.next;return head;}while (slow.next != null) {slow = slow.next;fast = fast.next;}fast.next = fast.next.next;return head;} // Definition for singly-linked list. public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }
Leetcode -- remove nth node from end of list