这题用到一个链表常用的找倒数第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; }}复制代码