学习笔记-数据结构-线性表(2024-04-23)

指针La和Lb分别是两个带头节点单链表的头指针,将表La的第i个元素其len个元素删除并插入到表Lb的第j(j>=1)个元素之前。

La : a->b->c->d
Lb : e->f->g->h
将La中的第i个元素开始的Len个元素插入到Lb中的第j个位置

  • 初始化两个指针 pre 和 p,分别指向 La 的头节点和第一个元素节点。
  • 遍历链表 La,找到第 i-1 个节点,pre 将指向它,p 将指向第 i 个节点(即要删除的第一个节点)。
  • 继续遍历 La,直到找到第 i+len-1 个节点,s 指针指向它,这是要删除的最后一个节点。
  • 更新 pre->next 指向 s->next,这样就从 La 中移除了 len 个节点。
  • 初始化指针 q 指向 Lb 的头节点。
  • 遍历链表 Lb,找到第 j-1 个节点,q 将指向它。
  • 更新 s->next 指向 q->next,并将 q->next 更新为 p,这样就将删除的元素插入到 Lb 的第 j 个元素之前。
typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*LinkList;
void insertsub(LNode *La,LNode *Lb,int i,int j,int len)
{
	LNode *pre=La;//pre指向表La的头节点
	LNode *p=La->next;//p指向表La的头节点后的第一个元素
	int k=1;
	while(k<i)//遍历到La到第i-1个元素,pre指向第i-1个元素,p指向的i个元素
	{
		pre=p;
		p=p->next;
		k+=1;
	}
	LNode *s=p;//s节点指向La的第i个元素
	k=1;
	while(k<len)//让s节点指向La的第i+len个元素
	{
		s=s->next;
		k+=1;
	}
	pre->next=s->next;//删除从La的第i个元素起的后len个元素
	LNode *q=Lb;//q指向Lb的头节点
	k=0;
	while(k<j-1)//令q指向Lb的第j-1个节点
	{
		q=q->next;
		k+=1;
	}
	s->next=q->next;//将La的第i+len-1个元素插入到Lb到第j个元素之前
	q->next=p;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值