每天进步一点点之带头节点单链表
Posted lixiangfu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天进步一点点之带头节点单链表相关的知识,希望对你有一定的参考价值。
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; }
以上是关于每天进步一点点之带头节点单链表的主要内容,如果未能解决你的问题,请参考以下文章