美文网首页算法数据结构
链表删除结点操作

链表删除结点操作

作者: 人魔七七 | 来源:发表于2018-11-08 15:58 被阅读32次

前提

这个链表不存在重复值的结点

思路

找到这个结点
操作被删除结点的前后指针

复杂度

O(n) 因为你要找到这个结点

代码

- (void)removeObject:(NSObject *)linkData
{
   
    //分两步 第一步找到当前结点 第二步删除操作
    //声明被删除的结点
    DSNode *deleteNode;
    
    if (linkData)
    {
        //当前指针指向头部结点
        self.current = self.head;
        //跳出条件是当前结点 是 nil
        while (self.current != nil)
        {
            //如果当前结点的值 和 要删除的值一样 就找到了要删除的结点
            if ([self.current.linkData isEqual:linkData])
            {
                deleteNode = self.current;
                break;
                
            }
            self.current = self.current.next;

        }
    }
   //找到被删除结点的前后结点 重新操作前后结点的指针 然后把删除的结点nil 分三种情况头部 尾部 以及中间位置
    DSNode *priorNode = deleteNode.prior;
    DSNode *nextNode = deleteNode.next;
    
    if (priorNode == nil)
    {
        self.head = nextNode;
        self.head.prior = nil;
        
    }
    else if (nextNode == nil)
    {
        
        self.tail = priorNode;
        self.tail.next = nil;
    }
    else
    {
        priorNode.next = nextNode;
        nextNode.prior = priorNode;
    }
    deleteNode = nil;
    deleteNode.prior = nil;
    deleteNode.next = nil;
    _count --;
    
}

用图来描述他的过程

  1. 找到要删除的结点



循环遍历链表
如果当前结点不是要找的那么current指针后移动一步
如果当前结点是要找的结点返回
如果当前结点是nil跳出循环

  1. 删除


DSNode *priorNode = deleteNode.prior;
DSNode *nextNode = deleteNode.next;

priorNode.next = nextNode;
nextNode.prior = priorNode;

deleteNode = nil;
deleteNode.prior = nil;
deleteNode.next = nil;

代码地址

https://github.com/renmoqiqi/DSLinkedList

相关文章

  • C语言基础 之 链表操作

    链表的操作 对链表的主要操作有建立链表、结构的查找与输出、结点数据的删除和结点数据的插入示例 动态链表的建立 动态...

  • 链表删除结点操作

    前提 这个链表不存在重复值的结点 思路 找到这个结点操作被删除结点的前后指针 复杂度 O(n) 因为你要找到这个结...

  • 关于链表的预备知识

    定义结点 创建链表结点 连接链表各结点 打印链表结点的值 打印整个链表中的值 删除整个链表 在链表尾部加入结点 特...

  • Python--单向链表

    单链表python实现 节点实现 单链表操作 头部插入 尾部添加 在index位置插入 删除结点

  • 算法:链表

    237 删除链表中的节点先复制其他结点内容到当前结点,再删除其他结点,实现删除当前结点。 19 删除链表的倒数第N...

  • 数据结构之链表及其栈和队列的实现

    链表的基本操作 定义 从链表头部插入元素 从链表头部删除元素 从链表尾部插入元素 从中间插入和删除结点 栈和对列的...

  • 链表-删除链表中重复的结点-java

    删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返...

  • JZ-056-删除链表中重复的结点

    删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返...

  • 访问单个节点的删除

    题目描述 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定待删除的节点,请执行删除操作,若该节...

  • 数据结构_无头结点链表的插入定位和删除操作

    不带头结点的单链表各种操作(定位,插入,删除)的实现,从中可以明白单链表带头结点的优势,可以保证循环代码的一致性,...

网友评论

    本文标题:链表删除结点操作

    本文链接:https://www.haomeiwen.com/subject/cvpwxqtx.html