无头链表-c


一、链表是什么?

对于初学者的我来说,不用像数组一样提前知道有多少个,可以直接读取文档里的数据,前提是知道格式。
这仅仅是小白我的理解,如果想知道具体的理论建议百度!

二、具体怎么写

1.结构体。

代码如下:

struct Node
{
	int data;			//数据域
	struct Node* next;	//指针域
};

2.生成结点函数。

代码如下:

struct Node* createNode(int data)
{
	struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
	if (newNode == NULL)
	{
		return NULL;
	}
	newNode->data = data;
	newNode->next = NULL;
	return newNode;
}

3.打印函数。

代码如下:

void printList(struct Node* list)
{
	struct Node* pMove = list;
	while (pMove)
	{
		printf("%d\t", pMove->data);
		pMove = pMove->next;
	}
	printf("\n");
}

4 .头插函数。

代码如下:

void insertNode(struct Node** list, int data)
{
	//因为要改变表头指向所有需要二级指针
	struct Node* newNode = createNode(data);
	newNode->next = *list;
	*list = newNode;
}

5.指定插函数。

void inserNodeByAppoin(struct Node** list, int data, int assign)
{
	struct Node* rightNode = *list;
	struct Node* leftNode = NULL;
	while (rightNode != NULL && rightNode->data != assign)
	{
		leftNode = rightNode;
		rightNode = leftNode->next;
	}
	if (rightNode == NULL)
	{
		printf("error!\n");
	}
	//指定位置可能插在头前面所以也要传二级指针
	else if (leftNode == NULL)
	{
		insertNode(list, data);
	}
	else
	{
		//创建新的结点直接插就行
		struct Node* newNode = createNode(data);
		leftNode->next = newNode;
		newNode->next = rightNode;
	}
}

6主函数。

//调用函数就行
int main(void)
{
	struct Node* List = createNode(1);
	printList(List);
	for (int i = 0; i < 3; i++)
	{
		insertNode(&List, i);
	}
	inserNodeByAppoin(&List, 600, 0);
	printList(List);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值