Remove Nth Node From End of List

这题用到一个链表常用的找倒数第n个node的方法,就是用两个node先后出发,runner先走,走到n的时候walker出发,runner走到头的时候walker就在n的位置。
要注意处理边界。。蛮头痛的,比如长度只有1的情况和删除首位的情况。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if (0 == n) return null;

        ListNode runner = head;
        ListNode walker = head;

        int i = 0;
        //这里的条件不能写成runner.next!=null因为有可能node长度就是1
        while (runner!= null) {
            if (i < n) {
                runner = runner.next;
                i++;
            } else {
                break;
            }
        }
        //这时候runner有可能是null的,注意null pointer。这种情况对应删除首位的情况比如[1,2] 2
        if(runner==null) return head.next;

        while (runner.next!= null) {
            walker = walker.next;
            runner = runner.next;
        }
        walker.next = walker.next.next;
        return head;
    }
}

你可能感兴趣的:(Remove Nth Node From End of List)