這題用到一個(gè)鏈表常用的找倒數(shù)第n個(gè)node的方法,就是用兩個(gè)node先后出發(fā)驶臊,runner先走,走到n的時(shí)候walker出發(fā),runner走到頭的時(shí)候walker就在n的位置剧劝。
要注意處理邊界。项炼。蠻頭痛的担平,比如長(zhǎng)度只有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;
//這里的條件不能寫(xiě)成runner.next!=null因?yàn)橛锌赡躰ode長(zhǎng)度就是1
while (runner!= null) {
if (i < n) {
runner = runner.next;
i++;
} else {
break;
}
}
//這時(shí)候runner有可能是null的锭部,注意null pointer。這種情況對(duì)應(yīng)刪除首位的情況比如[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;
}
}