【数据结构】单链表练习

本文提供单链表的三个练习题目,包括如何将带头节点的链表改为不带头节点,递增有序链表的集合运算A:= A∪(B∩C),以及如何在O(n)时间复杂度内就地逆置单链表。详细解答和测试可在链接中查看。
摘要由CSDN通过智能技术生成

(注:以下练习中调用的均为带头结点的单链表,读者可以通过“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 &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值