(注:以下练习中调用的均为带头结点的单链表,读者可以通过“https://blog.csdn.net/xing1584114471/article/details/83004289”带头结点的单链表进行学习了解)
/*
(一)将带头节点的单链表改成不带头节点的单链表。
*/
//构造结点
typedef struct Node1
{
ElemType data;//结点数据域
struct Node1 *next;//结点后继指针
}Node1;
//构造链表
typedef struct LinkList1
{
Node1 *head;//头指针
int count;//标记链表中的结点个数
}LinkList1, *Plist1;
//初始化单链表函数
void InitLinkList1(Plist1 list)
{
assert(list != NULL);
list->count = 0;
list->head = NULL;
}
//购买结点
static Node1 *BuyNode( ElemType val, Node1 *next)
{
Node1* s = (Node1*)malloc(sizeof(Node1) * 1);
assert(s != NULL);
s->data = val;
s->next = next;
return s;
}
//插入结点函数
void InsertLinkList1(Plist1 list, ElemType val, int pos)
{
assert(list != NULL);
if(pos < 0 || pos > list->count)
{
printf("pos is error!\n");
return ;
}
if(list->head == NULL)//第一个结点插入
{
list->head = BuyNode(val, NULL);
list->count++;
return ;
}
Node1* p = list->head;
while( pos > 1)
{
p = p->next;
pos--;
}
if(pos == 0)//考虑头插的情况(pos &#