码迷,mamicode.com
首页 > 其他好文 > 详细

每天进步一点点之带头节点单链表

时间:2020-07-24 16:29:50      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:length   code   指针   turn   size   creat   单链表   link   处理   

1,单链表分为带头结点和不带头结点,带头节点的好处,只有实际写代码后才能体会出来。可以类比顺序表中的哨兵

好处:

1,第1个位置的插入、删除更加方便,带来操作上的统一。

2,对于头插法:

不带头结点的链表,插入第一个结点时,需要特殊处理,删除操作类似.

3,优势2:统一空表和非空表的处理

举例:无头结点链表的头插法实现函数,不太明白,为什么网上搜到的样例,总是在循环之前建立了一个结点,放入循环中建立,本人测试并无问题。
typedef struct Link {
    int  elem;
    struct Link *next;
}link;
//无头结点链表的头插法实现函数
link * creatLink(int * arc, int length) {
    int i;
    //最初状态下,头指针 H 没有任何结点,所以,插入第一个元素,就相当于是创建结点 H
    link * H = NULL;
    //如果采用头插法插入超过 1 个元素,则可添加到第一个结点 H 之前
    for (i = 0; i<length; i++) {
        link * a = (link*)malloc(sizeof(link));
        a->elem = arc[i];
        //插入元素时,首先将插入位置后的链表链接到新结点上
        a->next = H;
        //然后再链接头指针 H
        H = a;
    }
    return H;
}
//网上样例,无头结点链表的头插法实现函数
link * creatLink(int * arc, int length) {
    int i;
    //最初状态下,头指针 H 没有任何结点,所以,插入第一个元素,就相当于是创建结点 H
    link * H =(link*)malloc(sizeof(link));
    H->elem = arc[0];
    H->next = NULL;
    //如果采用头插法插入超过 1 个元素,则可添加到第一个结点 H 之前
    for (i = 1; i<length; i++) {
        link * a = (link*)malloc(sizeof(link));
        a->elem = arc[i];
        //插入元素时,首先将插入位置后的链表链接到新结点上
        a->next = H;
        //然后再链接头指针 H
        H = a;
    }
    return H;
}

 

 

每天进步一点点之带头节点单链表

标签:length   code   指针   turn   size   creat   单链表   link   处理   

原文地址:https://www.cnblogs.com/lixiangfu/p/13371670.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!