使{a1,a2,a3...an-2,an-1,an}排列成{a1,an,a2,an-1,a3,an-2...}

本文介绍了一种链表处理算法,该算法将链表分为前后两部分,并通过逆置后半部分来实现交错排列。首先定义两个指针p和q,然后根据链表长度调整指针位置,接着逆置后半部分并进行交错连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法描述:

仔细观察这个排列,发现它 先从前半段 从前往后 取一个元素,再从后半段 从后往前 依次取一个元素,那么,如果要实现这个流程,每次需要遍历到最后取,因为在后半段从后往前取元素十分麻烦。

因此,我们其实很难想到自然就想到,将后半段元素逆置,这样的话,就可以定义两个指针p、q,分别指向前、后段的打头的结点,将q所指的结点连接到p后面,接着进行下一个结点的连接......

ok,费了好大劲写明白了算法,接下来就实现吧。我们老师总是说,只要不写代码,算法还是很简单的是吧?呵呵......用你说。

算法实现:

1、定义两个指针p、q,p,q指向第一个节点,

2、判断链表的长度的奇偶,如果是奇数,p前移len/2个结点,q前移len/2+1个结点

     如果是偶数,p前移len/2-1个结点,q前移len/2个结点

3、定义一个辅助结点指针a,将p的next设为NULL

4、a将q所指的后半段链表一个个前插入以p为头结点的链表中,这样做是为了将后半段逆置

5、接着开始连接操作,将q指向p,将p指向第一个节点,

6、把q->next指向的结点移动到p的后面,辅助结点指针a指向q->next,将q->next指向a->next

7、a->next=p->next,p->next=a,p=a->next

8、继续从7开始的操作,直至p!=q(这个条件对于奇偶都成立,需要好好在纸上画画)

链表的操作只要借助一个简单的图示就能很好理解。

 好了,差不多了,画完我就要累死了。

我的大功告成了,如果有小伙伴代码写不出来,可以私我看一下代码,我本来想把代码贴出来的,但是吧,我又想,这又不是什么很高级的代码,只是一个题目而已,看完了分析自己就大致写的出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值