本道题目采取的是双指针法,很久没有用到双指针法了,双指针法在链表中也经常用到,需要熟练掌握哦,下面给出一个示例:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2:
输入:head = [1], n = 1 输出:[] 示例 3:
输入:head = [1,2], n = 1 输出:[1]
这里我们最暴力的方法就是首先去遍历,然后找到第倒数N个元素,然后把它删除掉,这样的时间复杂度就很高了,最好的方法是是使用双指针法,我们定义一个fastindex,定义一个slowindex,我们先让走n+1的位置,为什么要走n+1呢,因为我们要让slowindex走到需要删除节点的上一个节点,这样方便进行操作;直接上代码:
ListNode*removeelement(ListNode*head){
ListNode*dummyHead=new ListNode(0);
ListNode*fastindex=dummyHead;
ListNode*slowindex=dummyHead;
dummyHead->next=head;
while(n--&&fast->next!=NULL){
fastindex=fast->next;
}
fastindex=fastindex->next;//找到倒数n的位置
while(fast->index!=NULL){
fastindex=fastindex->next;
slowindex=slowindex->next;//让快指针慢指针同时移动
}
slowindex->next=slowindex->next->next;
ListNode*tmep=slowindex->next;//释放内存
slowindex->next=tmep->next;
delete tmep;
return dummyHead->next;
};
今天的分享就到这里了,点个赞再走吧!