单链表的插入与删除

这篇具有很好参考价值的文章主要介绍了单链表的插入与删除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

链表是数据结构中的一种线性结构,表示数据运算之间的一种抽象关系。

1、单链表的结构如下:

typedef struct node{
    datatype data;  //数据
    struct node *next; //指向下一个节点的指针
}linklist_s;

        其中包括一个数据域和一个指针域,向单链表中插入成员时只需要再次分配一个同样的变量,让上一个变量中的指针域指向下一个节点即可,比起顺序表来说,链表更加灵活。

单链表的插入和删除,数据结构,链表

2、单链表的创建

        *先创建链表头,将指针域指向NULL,将数据域设置0


linklist_s *LinkListCreate(void)
{
    linklist_s *h;//定义一个linklist_s结构体类型的变量 *h
    h = (linklist_s *)malloc(sizeof(*h));//通过malloc申请内存空间
    h->data =0;     //将数据域设值为0
    h->next = NULL;  //指针域指向空

    return h;
}

3、单链表的插入

       *头插法:

                单链表的插入和删除,数据结构,链表

        *尾插法:

                单链表的插入和删除,数据结构,链表

        *位置插法:

                 单链表的插入和删除,数据结构,链表

 头插法代码如下:

(尾插法与位置插法只需要找到位置之后插入节点,本质上与头插法是一样的)

//头插法:
int LinkListInsert(linklist_s *h,datatype data)
{
    linklist_s *tmp;
    tmp = (linklist_t *)malloc(sizeof(*tmp));

     //1.分配临时的节点,将data放入到节点的数据域中
    tmp->data = data;

    //2.将tmp插入到节点中

    tmp->next = h->next;
    h->next = tmp;

    //3.成功返回0
    return 0;
}

4、单链表的删除

        *头删法

                单链表的插入和删除,数据结构,链表

        *尾删法      

                单链表的插入和删除,数据结构,链表

            *位置删法

                单链表的插入和删除,数据结构,链表

  头删法代码如下:

(尾删法与位置删法只需要找到位置之后删除节点,本质上与头删法是一样的)


int LinkListDeleteHead(linklist_s *h)
{
    linklist_s *tmp;
 
    //1.让tmp指向要删除的节点
    tmp = h->next;

    //2.让h->next指向下下一个节点
    h->next = h->next->next;


    //3.释放节点占用的内存
    if(tmp != NULL){
        free(tmp);
        tmp = NULL;
    }

    return 0;
}

如何找到要删除的位置?

           //尾删法:让h->next->next走到NULL的位置

   //尾删法:让h->next->next走到NULL的位置
    while (h->next->next != NULL) {
        h = h->next;
    }

          //位置删法:(pos为要删除的位置)

while (h->next != NULL) {
        if (pos != 0) {
            pos--;
            h = h->next;
        } 

***********如何将一个正序的单链表倒置呢?*********

单链表的插入和删除,数据结构,链表


void LinkListReverse(linklist_s *h)
{
    linklist_s *tmp,*iter;

    //让iter指针指向头节点之后的节点
    iter = h->next;
    //先让h->next指向空,意思链表中没有任何的节点
    h->next = NULL;

    //如果iter不为空,循环继续
    while(iter){
        //让tmp取到第一个节点
        tmp = iter;

        //让iter指向下一个节点
        iter = iter->next;

        //使用头插法将tmp插入到h之后
        tmp->next = h->next;
        h->next = tmp;
    }
}

 未完待续............文章来源地址https://www.toymoban.com/news/detail-558753.html

到了这里,关于单链表的插入与删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包