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

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

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

例子:  

输入:位置 = 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 


目录
相关文章
|
20天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
18 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
15天前
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
19 1
|
22天前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
13 0
LeetCode第二十四题(两两交换链表中的节点)
|
22天前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
36 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
23天前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
39 1
|
24天前
|
存储
【数据结构】——单链表实现
【数据结构】——单链表实现
|
26天前
|
存储
数据结构2——单链表
数据结构2——单链表
30 1
|
14天前
|
存储
数据结构(单链表)
数据结构(单链表)
9 0
|
15天前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
28 0
|
27天前
|
存储
数据结构--单链表
数据结构--单链表