主要问题是单向链表如何确认节点属于链表的倒数第几个
最重要的前提是设计虚拟节点,任何增删改最好需要,否则删除第一个,需要特殊情况处理。
定义虚拟节点
ListNode * virtualNode =new ListNode(0,head);
删除当前节点我们需要的是前一个节点的指针
ListNode * cur =new ListNode(0,virtualNode);
方法一
确认链表的长度Length,while循环,要删除倒数第N个 那么直接head节点向后移动Length-N
方法二(最好)
我们定义快慢指针,快指针先从虚拟节点开始移动N个。
for(int i = 0 ;i < n ;i++){
fastNode = fastNode->next;
}
然后当快指针到达最后一个节点 此时慢指针也会正好指向 删除节点的前一个节点
while(fastNode->next){
slowNode=slowNode->next;
fastNode=fastNode->next;
}
slowNode->next = slowNode->next->next;