倒数第n个节点其实就是顺数第 count-n+1 个节点,但是我们要删除这个节点就先要走到 第 count-n 个节点上去,p.next=p.next.next 就成功了。但是要注意的时候有可能 n == count 也就是说要删除链表头节点的时候要注意
public ListNode removeNthFromEnd (ListNode head, int n) {
// write code here
if(head==null){
return null;
}
ListNode p=head;
int count=0;
while(p!=null){//先遍历一遍找到链表节点数
p=p.next;
count++;
}
int k=count-n;//计算我们要找的第 count-n 个节点
ListNode p1=new ListNode(0);//整个节点出来
p1.next=head;
ListNode p2=p1;//记住假节点的引用
while(k>0){//找到第 count-n 个节点
p1=p1.next;
k--;
}
p1.next=p1.next.next;//断开
return p2.next;//返回假节点的 next
}
京公网安备 11010502036488号