单链表3--插入和删除一个结点

本文介绍了链式存储结构的优缺点,并详细阐述了单链表中节点的插入方法,包括头插法、尾插法和中间插入法,重点讨论了中间插入的实现。同时,讨论了节点的删除操作,强调了使用C++的delete函数来释放内存。最后,提出了一个编程挑战,涉及创建单链表、查询节点数量、插入和删除节点等操作。

前言

链式存储的优点:

新增和删除操作效率高,内空间利用率高!

链式存储的缺点:

查询效率低,因为用空间换时间!

  1. 结点的新增(插入)
    结点的插入方法有三种类型
    头插法:在head结点之后新增(插入)一个结点;
    尾插法:在尾结点之前新增(插入)一个结点;
    中间插入:在指定位置之后新增(插入)一个结点;
    我这次写的为中间插入的操作,如下:
    在第几个结点之前添加一个结点,给该结点的data赋值99!
            #include<iostream>
            using namespace std;
            struct Node
            {
         
         
                int data;
                Node *next;
            };
            Node *head, *p, *r;
            int x,y;
            void insert(Node *h,int u, int v){
         
         //将v值的结点插入到u结点之前
                Node *d, *e;
                int w;
                d = h;
                w = 0;//??
                while ((d != NULL)&&(w < u-1))
                {
         
         
                    /* 找到u节点的前一结点 */
                    d = d->next;</
### 单链表指定结点插入删除 #### 单链表指定结点插入单链表中,要在指定结点之后插入结点,通常需要以下步骤: 1. 创建新结点。 2. 找到指定结点3. 让新结点的 `next` 指向指定结点的下一个结点。 4. 让指定结点的 `next` 指向新结点。 以下是 Python 代码示例: ```python class Node: def __init__(self, data): self.data = data self.next = None class SingleLinkedList: def __init__(self): self.head = None def insert_after(self, target_data, new_data): new_node = Node(new_data) current = self.head while current: if current.data == target_data: new_node.next = current.next current.next = new_node return current = current.next ``` #### 单链表指定结点删除单链表删除指定结点,通常需要以下步骤: 1. 找到指定结点一个结点。 2. 让一个结点的 `next` 指向指定结点的下一个结点。 以下是 Python 代码示例: ```python class Node: def __init__(self, data): self.data = data self.next = None class SingleLinkedList: def __init__(self): self.head = None def delete_node(self, target_data): if self.head is None: return if self.head.data == target_data: self.head = self.head.next return current = self.head while current.next: if current.next.data == target_data: current.next = current.next.next return current = current.next ``` ### 双链表指定结点插入删除 #### 双链表指定结点插入 在双链表中,要在指定结点之后插入结点,通常需要以下步骤: 1. 创建新结点。 2. 找到指定结点3. 让新结点的 `next` 指向指定结点的下一个结点。 4. 让新结点的 `prev` 指向指定结点。 5. 如果指定结点的下一个结点存在,让其 `prev` 指向新结点。 6. 让指定结点的 `next` 指向新结点。 以下是 Python 代码示例: ```python class Node: def __init__(self, data): self.data = data self.prev = None self.next = None class DoublyLinkedList: def __init__(self): self.head = None def insert_after(self, target_data, new_data): new_node = Node(new_data) current = self.head while current: if current.data == target_data: new_node.next = current.next new_node.prev = current if current.next: current.next.prev = new_node current.next = new_node return current = current.next ``` #### 双链表指定结点删除 在双链表中删除指定结点,通常需要以下步骤: 1. 找到指定结点。 2. 如果指定结点一个结点存在,让其 `next` 指向指定结点的下一个结点3. 如果指定结点的下一个结点存在,让其 `prev` 指向指定结点一个结点。 以下是 Python 代码示例: ```python class Node: def __init__(self, data): self.data = data self.prev = None self.next = None class DoublyLinkedList: def __init__(self): self.head = None def delete_node(self, target_data): current = self.head while current: if current.data == target_data: if current.prev: current.prev.next = current.next else: self.head = current.next if current.next: current.next.prev = current.prev return current = current.next ``` ### 复杂度分析 - **时间复杂度**:单链表双链表指定结点插入删除操作的时间复杂度通常都是 $O(n)$,因为需要遍历链表找到指定结点- **空间复杂度**:都是 $O(1)$,只需要常数级的额外空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值