当前位置:   article > 正文

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

学习笔记-数据结构-线性表(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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/484628
推荐阅读
相关标签
  

闽ICP备14008679号