数据结构——不带头结点的单链表的插入(C/C++实现)

插入操作,即在表L的第i个位置上插入指定元素e,由于不带头结点的单链表不存在“第0个结点”因此i = 1时需要进行特殊的处理。其余情况思路为:找到第i-1个结点,将新结点插入该结点之后。

typedef struct LNode {
	int data;
	struct LNode *next;
}LNode,*LinkList;
bool ListInsert(LinkList &L,int i,int e)
{
	if(i < 1)
	return false;
	//不带头结点的单链表需要特殊考虑 此时需要将头指针指向新的结点 
	if(i == 1)
	{
		LNode *s = (LNode*)malloc(sizeof(LNode));
		s->data = e;
		s->next = L;
		L=s;
		return true;
	}
	//首先需要找到i-1的位置
	int j = 1;//j就是p指针指向的结点
	LNode *p;
	p = L;//p此时为第一个结点 注意不是头结点
	while(p != NULL && j < i - 1)
	{
		p= p->next;
		j++; 
	 } 
	 if(p == NULL)
	 return false;//此时i的值不合法
	 //此时j = i - 1; p 为第i-1个结点
	 //建立一个新的结点来存放需要插入的该数据
	 LNode *s = (LNode*) malloc(sizeof(LNode)) ;
	 s->data = e;
	 s->next = p->next;
	 p->next = s;
	 return true;	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值