源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C++删除链表中间节点的方法

  • 时间:2020-11-02 11:14 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++删除链表中间节点的方法
本文实例讲述了C++删除链表中间节点的方法。分享给大家供大家参考,具体如下: [b]题目:[/b] 给定链表头结点head,实现删除链表的中间节点函数。 [b]解题思路及代码:[/b] 快慢指针,快指针走两步,慢指针一步。 当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。 [b]链表结构定义:[/b]
typedef struct Node
{
  int data;
  struct Node* next;
}node, *pLinkedList;

[b]算法C++代码:[/b]
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;
}

希望本文所述对大家C++程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部