8.7

链表

eq:

struct student

{

char name[20]

int age;

char sex;

struct student*next

};

 

性质:头结点无前驱。尾结点无后驱。

可以没有头结点与尾结点

 

链表插入

头插法与尾插法

头插法是在头结点与第一个结点中间插入。

尾插法是在尾结点后面插入。

步骤:

1.移动指针

2.分配空间

3.操作指针

重点

1.

int LinkInsert(Node **l, ElemType e)  //n 插入的位置
{
	//尾插法
	if (*l == NULL)   //空链表
	{
		*l = (Node *)malloc(sizeof(Node) * 1);
		if (NULL == *l)
		{
			return FAILURE;
		}
		return SUCCESS;
	}  //非空链表
	else
	{
		Node *p = *l;

		while (p->next != NULL)   //指针移动到最后一个
		{
			p = p->next;
		}

		Node *n = (Node *)malloc(sizeof(Node) * 1);
		if (NULL == n)
		{
			return FAILURE;
		}

		p->next = n;
		n->data = e;
		n->next = NULL;
		
		return SUCCESS;
	}
}

2.

int LinkInsert(Node *l, int n, ElemType e)  //n 插入的位置
{
	Node *p = l;
	int k = 1;   //k 移动的次数

	if (NULL == l)
	{
		return FAILURE;
	}

	while (k < n && p != NULL)
	{
		p = p->next;
		k++;
	}

	if (k > n || p == NULL)
	{
		return FAILURE;
	}

	Node *q = (Node *)malloc(sizeof(Node) * 1);
	if (NULL == q)
	{
		return FAILURE;
	}

	q->data = e;   //数据域
	q->next = p->next;
	p->next = q;

	return SUCCESS;
}

重点

倒序链表

int LinkReverse(Node *l)
{
	if (NULL == l)
	{
		return FAILURE;
	}

	Node *p = l->next;
	l->next = NULL;

	while (p != NULL)
	{
		Node *q = p;
		p = p->next;
		q->next = l->next;
		l->next = q; 
	}

	return SUCCESS;
}

一次一次的循环将原来的链表倒序放置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值