删除链表中倒数第n个节点

问题:
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
思路:
定义两个指针,slow、fast
fast先先前走n步后、slow和fast一起走,直到fast到最后一个结点
当fast为空,说明fast在最后一个结点后面了,说明需要删除的是第一个结点,直接删除
代码:

public class Solution {
    /**
     * @param head: The first node of linked list.
     * @param n: An integer.
     * @return: The head of linked list.
     */
    ListNode removeNthFromEnd(ListNode head, int n) {
        // write your code here
        if(head == null || n <1){
            return null;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        head = dummy;
        ListNode slow = head.next;
        ListNode fast = head.next;
        for(int i = 0; i < n; i ++){
            fast = fast.next;
        }
        if(fast==null) // 说明删除的是第一个非头结点
            return head.next.next;
        while(fast.next != null){
            slow = slow.next;
            fast = fast.next;
        }
        slow.next = slow.next.next;
        return dummy.next;
    }
}

你可能感兴趣的:(删除链表中倒数第n个节点)