栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

链表练习题c++代码实现(三):删除链表的倒数第n个结点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链表练习题c++代码实现(三):删除链表的倒数第n个结点

1.暴力解法

暴力解法其实就很简单了两次循环,先把链表长度算出来。
然后算一下倒数第n个是整数第几个,
整一个变量n,每访问一个结点,n++一下。

2.一次循环

这个方法应该是最优解法
** 思路 **

  • 两个指针fast和slow中间间隔了n-1个结点。
  • 两个指针同步往前走
  • 当fast->next==NULL也就是fast指向最后一个结点的时候
    slow自然就指向倒数第n个结点了

这个方法只要一次循环就可以搞定

 ListNode* removeNthFromEnd(ListNode* head, int n) {
            //思路:
            
           ListNode *dummyNode = new ListNode;
           dummyNode->next = head;
           ListNode *p = dummyNode, *q = dummyNode;
           ListNode *pre = dummyNode;//q针的前驱指针
           while (n-- && p != NULL) {
               p = p->next;
           }
           
           p = p->next;
           //p指针多往前走一个单位,这样p和q之间就间隔了n个结点
           //q最终就会指向n的前一个结点,即倒数第n-1个结点,这样方便删除
   
           while (p != NULL) {
               p = p->next;
               q = q->next;
           }

           q->next = q->next->next;
           return dummyNode->next;
     }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号