2019408统考数据结构算法设计题(每日一题)

设线性表 L= ( a1 , a2 , a… , an-2 , an-1 , a n ) 采用带头结点的单链表保存,链表中结点定义如下:
typedef struct node {
int data ;
struct node* next ;
} NODE ;
请设计一个空间复杂度为 O ( 1 ) 且时间上尽可能高效的算法,重新排列 L 中的各结点,得到线性表 L’= ( a 1 , a n , a 2 , a n-1 , a 3 , a n-2 … ) 。
要求:
( 1 ) 给出算法的基本设计思想
( 2 ) 根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
( 3 ) 说明你所设计的算法的时间复杂度。

先在纸上梳理思路和核心代码

方法一(此方法时间复杂度太高但考研中可以得到大多数分数)
在这里插入图片描述

方法一完整代码
void fun(Linklist &L)
{	
	LNode *j=L->next,*i=L->next,*r=L->next,*q=i->next;
	while(j)j=j->next;使j成为尾指针
	whille(i->next!=j||i->next->next!=j){链表长为偶数和奇数的情况
			while(r->next!=j)r=r->next;使r一直为尾指针j的前驱
			j->next=q;下面为尾插和保存其他指针的代码
			i->next=j;
			j=r;
			r=L;
			i=q;
			q=q->next;
	}
	
}

方法二(此方法时间复杂度较小)
在这里插入图片描述

在这里插入代码片
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值