• 如何实现单链表的插入和删除操作


    单链表插入

    (1)找到位置p(ai-1

    (2)生成新结点s,数据域赋值

    (3)新结点指针域指向ai(ai的地址存放在ai-1的指针域

    (4)ai-1的指针域指向新结点s

    直接上代码:

    Status InsertList(LinkList head,DataType x,int i)
    {
        ListNode* p;
        p=head;
        int j=1;
        while(p && j<i)
        {
            p=p->next;
            j++;
        }    //p现在是ai-1这个结点
        if(!p || j>i)
        {
            printf("Position Error!");
            return ERROR;
        }
        ListNode* s=(ListNode*)malloc(sizeof(ListNode));
        s->data=x;
        s->next=p->next
        p->next=s;
        return OK;
    }

    删除单链表结点:

    (1)找到要删除的结点前一个结点p(原因是删除结点的位置在前一个结点的指针域)

    (2)把p->next指向ai的下一个结点(把ai从链上摘除)

    (3)释放ai空间

    直接粗暴上代码:

    Status DeleteList(LinkList head,int i)
    {
        ListNode* p,*r;   //声明两个指针,一个用来找到删除结点前的结点。    一个用来存储要删除结点的后继结点的地址的。
        p=head;
        int j=1;
        while(p->next && j<i)    //这里要判断p->next得是真(也就是说得有后继结点也就是要删除的结点)。。。//不要忘了这个方式  p=p->next;   指针在移动
        {
            p=p->next;
            j++;
        }
        if(p->next ==NULL || j>i)
        {
            printf("Position Error!");
            return ERROR;
        }
        r=p->next;       //把删除结点的首地址给临时结点     这样就能把删除结点的指针域保存下来   
        p->next=r->next;  //删除结点的指针域   指向   删除结点后继结点的首地址
        free(r);          //记得释放资源
        retuen OK;
    }

    删除结点必须保证在连边长度内。即1<=i<=n;

    删除单链表头元素:

    两步:(1)保存头元素的指针域(即头元素的后继节点的首地址)

    (2)头结点指针域指向头元素的后继节点。

    void RemoveHead(LinkList head)
    {
        ListNode * p;
        p=head->next;
        head->next=p->next;
        free(p);
    }
  • 相关阅读:
    python 去重
    怎样稳稳获得年化高收益
    module_loader.py
    mac上安装ta-lib
    mac上安装memcache
    创建widget
    smartsvn 用法
    用nifi executescript 生成3小时间隔字符串
    TclError: no display name and no $DISPLAY environment variable
    【C#】详解C#序列化
  • 原文地址:https://www.cnblogs.com/westlife-11358/p/9459801.html
Copyright © 2020-2023  润新知