c语言 链表全倒置,双链表循环,奇逆序偶顺序

1.全倒置
我是灵魂画手
在这里插入图片描述
在这里插入图片描述
第一次循环是断开第一结点和第二结点连线(p->next=L->next=NULL,这样第一个结点就指向空)
第二次循环将第二个结点连到第一结点之后(插入头结点之后),然后头结点再连接第二结点,指针p到q指针那里复位
第三次循环将第三结点连接第二结点之后,然后头结点连接第三结点,p复位 ,
以此类推

void FixTwo(List L){//倒置 
	Node *q,*p;
	p=L->next;//p指向第一个结点
	L->next=NULL;//L的指针域为空
	while(p!=NULL){
	q=p->next;//q作为标记指针永远指向p的下个结点,用于p指针复位
	p->next=L->next;//p结点指向头结点的下个结点
	L->next=p;//头结点指向p结点
	p=q;//p复位指向下个结点
	}
}

2.循环
在这里插入图片描述
首先两个循环单链表LA,LB 。p,q两个指针分别指向这两个链表,遍历链表找到表尾指针,第一个链表尾部指向第二个链表的第一结点,第二个链表的尾指向第一链表的头结点。
在这里插入图片描述
3.奇数位逆序偶数位顺序
在这里插入图片描述
第一步先将,p记录第一结点,L指向空,创建一个新的Lb,q指向第二结点,判断i=1,第一结点指向空,头结点指向第一结点p,p指向q;
在这里插入图片描述
第二步i等于2时候执行else,尾插法,顺次下去
第三步i等于3继续头插入第一个结点

在这里插入图片描述
第四第五同上方法。

void Divide(List L,List &Lb){//链表奇数位逆序,偶数位正序 
	Node *p,*q;
	int i=1;
	p=L->next;
	L->next=NULL;
	Lb=new Node;
	Lb->next=NULL;
	Node*real=Lb;
	while(p){
		q=p->next;
		if(i%2==1){
			p->next=L->next;
			L->next=p;
		}
		else {
			real->next=p;
		    real=p;
		}
		p=q;
		i++;
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值