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”

编程学习书籍:

编程学习视频:

猜你喜欢

转载自blog.csdn.net/Hsuesh/article/details/112620075