当前位置:首页 » 操作系统 » 链表算法题目

链表算法题目

发布时间: 2025-03-30 18:06:18

① 已知一个带头节点的非空单链表L,请编写算法实现将第一个节点移动到表尾

以下是代码:
Node *p=L;//定义临时对象指针
while(p->next) p=p->next;//找到最后结点
if(p!=L->next) //如果只有一个结点就不移
{
p->next=L->next;//最后结点指向第一结点
L->next=L->next->next;//第二结点变为第一结点
L->next->next=NULL;//原第一结点已经是最后结点,设置最后结点的下一结点为NULL
}

② 有两个带头结点的单循环链表L1和L2,编写算法将链表L2链接到链表L1之后成为一个单循环链表

list * connect(list* L1,list* L2)
{
list * p=L1
while(p->next)
p=p->next; //找到L1最后一个节点
p->next=L2->next; //把L2的节点连到L1的末端
while(p->next)
p=p->next; //找到L2最后一个节点
p->next=L1; //将next指向L1头节点,形成循环链表
return L1;
}

③ 请教一道数据结构的算法题算法具体描述如下: 设以带头结点的双向循环链表L=(a1,a2,....,an).试写一个时

有两种思想供参考:(1)
整体思想

(2)化整为零
先来说说整体思想,我们可以发现序号为奇数的元素的前后相对位置未变,只是偶数位置有变化。这样的话,我们可以将偶数按序号
逆序
(由大到小)插入到
链表
尾部。考虑到
时间复杂度
问题,在搜索偶数的过程中,可以先找到最大的偶数序号+1的位置(是个奇数,奇数相对位置不动),记下它的位置为L,L向前指的那个位置是偶数位置。这样再找下一个时,直接用L-2,直至k-2等于3为止即可找到所有序号为偶数的位置。
怎么化整为零呢?先来看看下面这个过程:
null
1
2
(1是从head的后面插入链表,2是从tail的前面插入链表)
1
3
2
(3是从1的后面插入链表)
1
3
4
2(4是从2的前面插入链表)
1
3
5
4
2(5是从3的后面插入链表)
......
1
3
5
...
n
...
6
4
2
由此,我们可以设置2个指针p,q,分别指向刚刚序号为奇数的元素插入的位置和刚刚序号为奇数的元素插入的位置,下一个序号为奇数的元素插入到p后,为偶数的插入到q前,并随着插入的过程实时变化p,q,最后再将q和q指向的元素之间的2个指针接上就OK了。
程序交给你来写吧,应该不太难。

热点内容
脚本置父窗口 发布:2025-04-01 19:19:52 浏览:311
微信营销源码下载 发布:2025-04-01 18:55:22 浏览:886
路由器搭建web服务器 发布:2025-04-01 18:52:56 浏览:719
vc编译器版本 发布:2025-04-01 18:48:59 浏览:807
sqlserverbak 发布:2025-04-01 18:48:57 浏览:56
安卓手机如何打开7z文件视频教程 发布:2025-04-01 18:35:06 浏览:404
本田风尚算什么配置 发布:2025-04-01 18:29:56 浏览:6
30p压缩机 发布:2025-04-01 18:29:54 浏览:655
烧录器编程 发布:2025-04-01 18:21:09 浏览:462
安卓微信如何把手机调白 发布:2025-04-01 18:17:11 浏览:964