package com.interview.books.leetcodeoj; import com.interview.leetcode.utils.ListNode; /** * Created_By: stefanie * Date: 14-12-18 * Time: 下午3:35 */ public class LOJ19_RemoveNthNodeFromEnd { //use slow and fast pointer to scan the list, fast is n + 1 steps forward, //delete the next node of slow //be careful about n > len(list). if(fast == null && n > 0) return dummy.next; //use sample to verify the condition public ListNode removeNthFromEnd(ListNode head, int n) { if(head == null) return null; if(n <= 0) return head; ListNode dummy = new ListNode(0); dummy.next = head; ListNode slow = dummy; ListNode fast = head; while(fast != null && n > 0){ fast = fast.next; n--; } if(fast == null && n > 0) return dummy.next; while(fast != null){ fast = fast.next; slow = slow.next; } if(slow.next != null) slow.next = slow.next.next; return dummy.next; } }