zoukankan      html  css  js  c++  java
  • C++丨删除链表中间节点的方法详解

    这篇文章主要介绍了C++删除链表中间节点的方法,结合实例形式分析了链表删除中间节点的具体思路与实现技巧,希望在学习上有帮助到大家。


     

    题目:

    给定链表头结点head,实现删除链表的中间节点函数。

    解题思路及代码:

    快慢指针,快指针走两步,慢指针一步。 

    当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。

    链表结构定义:

    typedef struct Node

    {

      int data;

      struct Node* next;

    }node, *pLinkedList;

    算法C++代码:

    Node* removeMidNode(pLinkedList head)

    {

      if (head->next == NULL || head == NULL)

        return head;

      if (head->next->next == NULL)

        return head->next;

      pLinkedList fast = head;

      pLinkedList slow = head;

      pLinkedList pre = NULL;

      /*

      head  1    2    3    4    5

      pre  slow  fast

      */

      //1个节点

      if (head->next->next == NULL)

        return head->next;

      while (fast->next != NULL && fast->next->next != NULL)

      {

        pre = slow;

        fast = fast->next->next;

        slow = slow->next;

      }

      //此时fast已到终点,slow为中间节点,pre为中间节点前一个节点

      pre->next = slow->next;

      free(slow);

      slow = NULL;

      return head;

    }

    今天的分享就到这里了,有什么问题的地方欢迎大家指出。


     

    最后,如果你也想成为程序员,想要快速掌握编程,赶紧加入学习企鹅圈子

    里面有资深专业软件开发工程师,在线解答你的所有疑惑~编程语言入门“so easy”

    编程学习书籍:


     

    编程学习视频:


     
  • 相关阅读:
    JavaScript的valueOf和toString
    Max SPA
    SQL Server从BAK文件还原新的数据库
    SQL Server删除log文件
    为什么要监控sql语句?如何监控?
    Mac下使用zsh不执行/etc/profile文件
    MAC下快速打开指定目录(转)
    干货满满!10分钟看懂Docker和K8S(转)
    Spring Boot Metrics监控之Prometheus&Grafana(转)
    Spring Boot Actuator:健康检查、审计、统计和监控(转)
  • 原文地址:https://www.cnblogs.com/mu-ge/p/14278136.html
Copyright © 2011-2022 走看看