题目链接:LeeCode19删除链表的倒数第N个节点
题目描述:
快慢指针,定义一个比正常快n个节点的指针,当快指针到达终点时,慢指针恰好到想删除节点的父节点
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//慢指针
ListNode temp=head;、
//快指针
ListNode pre=head;
//让快指针先走n步
for (int i = 0; i < n; i++) {
pre=pre.next;
}
//当快指针走到null证明需要删的节点是头节点
if(pre==null){
//当链表除了头节点还有其他节点时,直接返回第二节点即删除该头节点
if(head.next!=null){
return head.next;
}else{//当只有头节点这一个节点时,直接返回空
return null;
}
}
//找被删除的节点的父节点
while (temp.next != null) {
if(pre.next==null)
break;
temp=temp.next;
pre=pre.next;
}
//将被删除节点跳过直接指向下一个节点,即删除
temp.next=temp.next.next;
return head;
}
}