单链表的结构操作
1遍历链表并打印
/*********************************************************
********
函数名:headLinkList_print
功 能:遍历链表,并打印每个节点的数据域
参 数:无
返回值:操作的成功或失败
**********************************************************
*******/
BOOL headLinkList_print(headLinkList* h)
{
if (h == NULL)
{
printf("[Line %d] %s 传入地址为NULL!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//让p指向首个数据节点,然后重复:打印当前节点,再访问到下一个节
点
for (struct node* p = h->next; p != NULL; p = p->next)
{
printf("%d, ", p->data);
}
printf("\n");
return TRUE;
}
插入节点
1**. 头插法**
新节点插入到头节点的后面
/*********************************************************
********
函数名:headLinkList_insertHead
功 能:在链表的头部插入数据节点(新节点位于头节点的后面)
参 数:headLinkList* h 链表的头指针(指向头节点)
elemType data 新节点的数据域
返回值:操作的成功或失败
**********************************************************
*******/
BOOL headLinkList_insertHead(headLinkList* h, elemType
data)
{
struct node* p; //指向新插入的节点
if (h == NULL)
{
printf("[Line %d] %s 传入地址为NULL!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//为新节点申请堆区空间
p = malloc(sizeof(struct node));
if (p == NULL)
{
printf("[Line %d] %s 内存不足!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//立刻对新节点空间赋值
p->data = data;
p->next = NULL;
//处理新节点的插入
p->next = h->next; //让新插入的节点能够访问头节点原来存储的
下一个节点的地址
h->next = p; //让头节点能够访问新插入的节点
h->length += 1; //记录节点数量+1
return TRUE;
}
2. 尾插法
/*********************************************************
********
函数名:headLinkList_insertTail
功 能:在链表的尾部插入数据节点
参 数:无
返回值:链表结构的地址
时 间:2023-12-14
**********************************************************
*******/
BOOL headLinkList_insertTail(headLinkList* h, elemType
data)
{
struct node* p = NULL; //指向新插入的节点
struct node* q = NULL;
if (h == NULL)
{
printf("[Line %d] %s 传入地址为NULL!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//为新节点申请堆区空间
p = malloc(sizeof(struct node));
if (p == NULL)
{
printf("[Line %d] %s 内存不足!\n", __LINE__,
__FUNCTION__);
return FALSE;
}
//立刻对新节点空间赋值
p->data = data;
p->next = NULL;
//定位到插入前原链表的最后节点
q = h;
for (; q->next != NULL; q = q->next);
//实现两个节点的链式关系
p->next = q->next; //可省
q->next = p;
//数据节点个数+1
h->length += 1;
return TRUE;
}