数据结构单链表之删除给定位置的链表节点 | 第五套

简介: 数据结构单链表之删除给定位置的链表节点 | 第五套

给定一个单链表和一个位置,删除给定位置的一个链表节点。

例子:  

输入:位置 = 1,链表 = 8->2->3->1->7
输出:链表 = 8->3->1->7
输入:位置 = 0,链表 = 8->2->3->1->7
输出:链表 = 2->3->1->7

如果要删除的节点是根节点,直接删除即可。要删除中间节点,我们必须有一个指向要删除的节点之前的节点的指针。因此,如果位置不为零,我们将循环 position-1 次并获得指向前一个节点的指针。

下面是上述想法的实现。

#include <iostream>
using namespace std;
class Node
{
  public:
  int data;
  Node *next;
};
void push(Node** head_ref, int new_data)
{
  Node* new_node = new Node();
  new_node->data = new_data;
  new_node->next = (*head_ref);
  (*head_ref) = new_node;
}
void deleteNode(Node **head_ref, int position)
{
  if (*head_ref == NULL)
    return;
  Node* temp = *head_ref;
  if (position == 0)
  {
    *head_ref = temp->next;
    free(temp);     
    return;
  }
  for(int i = 0; temp != NULL && i < position - 1; i++)
    temp = temp->next;
  if (temp == NULL || temp->next == NULL)
    return;
  Node *next = temp->next->next;
  free(temp->next);
  temp->next = next;
}
void printList( Node *node)
{
  while (node != NULL)
  {
    cout << node->data << " ";
    node = node->next;
  }
}
int main()
{
  Node* head = NULL;
  push(&head, 7);
  push(&head, 1);
  push(&head, 3);
  push(&head, 2);
  push(&head, 8);
  cout << "创建的链表:";
  printList(head);
  deleteNode(&head, 4);
  cout << "\n位置 4 删除后的链表:";
  printList(head);
  return 0;
}

输出:

创建的链表: 
 8 2 3 1 7 
位置 4 删除后的链表: 
 8 2 3 1 


目录
相关文章
|
4天前
|
算法 Java
Java数据结构与算法:双向链表
Java数据结构与算法:双向链表
|
4天前
|
算法 Java
Java数据结构与算法:循环链表
Java数据结构与算法:循环链表
|
5天前
|
存储
【海贼王的数据航海】链表—单链表
【海贼王的数据航海】链表—单链表
7 0
|
5天前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
5天前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
5天前
|
算法 程序员 数据处理
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
|
5天前
|
算法
【数据结构与算法 经典例题】随机链表的复制(图文详解)
【数据结构与算法 经典例题】随机链表的复制(图文详解)
|
5天前
|
算法 C语言
【数据结构与算法 经典例题】链表的回文结构(图文详解)
【数据结构与算法 经典例题】链表的回文结构(图文详解)
|
5天前
|
算法
【数据结构与算法 经典例题】反转链表(图文详解)
【数据结构与算法 经典例题】反转链表(图文详解)
|
5天前
|
算法 C语言
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点