定义两个节点,b指向第n个节点的位子,a为第一个。
然后,一起走,当b走到最后一个节点位子的时候,a节点即为要删除的节点。
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode a = head;
ListNode b = head;
ListNode prea = head;
while(n > 1) {
b = b.next; //将b 遍历到 n的位子
n--;
}
if(b.next == null){ //当b遍历到最后一个节点的时候,其实是要删除头节点,直接删除。
return head = head.next;
}
//利用prea 记录 a的前面位子,找到后直接删除a
while(b.next != null) {
prea = a;
a = a.next;
b = b.next;
}
prea.next = a.next;
a = null;
return head;
}
}