到了学校之后发现自己啥都不会,有点伤心了,罢了,开始进入正题:
来看看我的成品(大多数属于发牢骚,还有就是只有自己能听懂的语言),所以注释可以看下面。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;//
typedef struct LNode
{
ElemType data;
struct LNode* next;
} LNode,* LinkList;
void InitList(LinkList &L)
{
L=(LinkList )malloc(sizeof(LNode));//就把它当作头节点
L->next=NULL;
}
void create(LinkList &L,int n)
{
/*//前插法创建链表
InitList(L);
for(int i=0;i<n;i++)
{
LNode *p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(p->data));
p->next=L->next;//前插法,新创一个空间,将这个空间连接原来的空间并消除原来空间的联系,相当于在原来的空间里面挤入了一个新空间
L->next=p;
}*/
//#include<bits/stdc++.h>
//这个头插法不行,要用尾插法
InitList(L);
LNode *r;
r=L;
for(int i=0; i<n; i++)
{
LNode *p=(LNode *)malloc(sizeof(LNode));
p->next=NULL;
scanf("%d",&(p->data));
r->next=p;
r=p;//别忘了这一步;
}
}
void MergeLost(LinkList &LA,LinkList &LB,LinkList &LC)
{
LNode *pa=LA->next;
LNode *pb=LB->next;
LC=LA;
//不合常理 LNode *pc=pa;
LNode *pc=LC;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
//先后顺序很重要
if(pa->data==pb->data)//这样就行了,题目为递增的,也就是最多出现一个重复的
{
//一定要重新写
LNode *temp;
temp=pb;
pb=pb->next;
// pc=pb;
free(temp);
pc->next=pa;
pc=pa;//书上是说把这个c总是放在目前有元素的地方
pa=pa->next;
}
// pa++;//最容易错的地方
else
{
pc->next=pa;
pc=pa;//书上是说把这个c总是放在目前有元素的地方
pa=pa->next;
}
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa)pc->next=pa;
else if(pb)pc->next=pb;//看清条件!!!!!!!!
free (LB);//别忘了要释放空间
}
void print(LinkList L)
{
LinkList p;//=(LinkList )(malloc(sizeof (LNode)));
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
LinkList LA;
LinkList LB;
LinkList LC;
create(LA,4);
create(LB,4);
MergeLost(LA,LB,LC);
print(LC);
return 0;
}
先来说几个这个题目的引言哈哈,关于这个题,要注意,本来他就是算法题,只要写核心代码就行,之所以写的是完整代码,一是为了巩固之前自己学的,创建链表的知识,还有就是为了验证自己是否对这个算法真正理解,还有对题目的理解,所以我们先来注意一点,这个题目给了前提,两个表原本要都是递增的,所以在一个表中是没有重复的,但是两个表中可以有相同的,这也就为后面我们最多只要删除一个重复的数奠定了条件,别问我为什么 这么强调,因为自己的血泪史QAQ,感觉代码本身比他的解释更重要,主要是靠自己探索,所以我就简述一下思路和我自己写的时候犯的错。
首先就是思路吧:这个题目我们要有合并就必须先要有链表,所以先创建链表,别用前插法,因为前插法是键盘输入和插入的链表顺序显示出来是相反的,而且还有一点就是我们这个代码是专门为递增的链表合并的,所以这样合并后输出来就会是玩全没有顺序而言的东东,然后我们用后插法插入链表后,这时候我们就就解释一下核心代码的思路:
void MergeLost(LinkList &LA,LinkList &LB,LinkList &LC)
{
LC=LA;//先将一个LC头结点指向链表的LA,然后再将pa,pb分别放在两个要合并的链表的首元结点上;
LNode *pa=LA->next;
LNode *pb=LB->next;
//不合常理 LNode *pc=pa;//这里一般我们创建链表都是开始把指针放在头接点上,而这里虽然没有给LC分配空间但它其实就相当于建一个新链表,只不过空间用的是LA,LB的空间。
LNode *pc=LC;
while(pa&&pb)//把已经比完了较小的元素放进LC中,且让pc移到该元素上,再把pa或者pb移到待重新比较的元素上//比较pa,pb两个指针指向的元素的值。
{//如果碰见LA和LB里面相等的元素,就将pb往后移同时把pa此是的元素放在LC里面,并让pa往后移;
if(pa->data<=pb->data)
{
if(pa->data==pb->data)//这样就行了,题目为递增的,也就是最多出现一个重复的
{
//一定要重新写
LNode *temp;//
temp=pb;//别想着把这两句串作为上下部分的公用,这也就是我一直没发现的错误,随着改变下面的判断条件也会变,这时候就改变了我们原来的意思。
pb=pb->next;
free(temp);
pc->next=pa;
pc=pa;//把这个pc总是放在目前有元素的地方
pa=pa->next;
}
// pa++;//最容易错的地方,往后移不是加加TAT
else
{
pc->next=pa;
pc=pa;
pa=pa->next;//这才是表示pa往后移,表示指向下一个已经建立了链表联系的元素
}
}
else
{
pc->next=pb;
pc=pb;//要了解链表的结构,这里就相当于pc=pb;
pb=pb->next;
}
}
if(pa)pc->next=pa;//如果pa还不为空,那么肯定就它后面的元素放在LC里面哈哈
else if(pb)pc->next=pb;//看清条件!!!!!!!!
free (LB);//别忘了要释放空间
}
然后就打印就行了。
然后就是我写这个代码的时候犯的错误:1.我们创建的一般是头节点,除非没有头节点,而非头指针。
2.在插入数据的时候我们先对这个的数据附上原来链表的最后,然后再把这个数据和原链表建立联系,不可以颠倒顺序,不然就是错的;
3.每次插入一个数据的时候在最后都要记得把目前链表的指针放在该元素上,如果不放虽然对目前的这个元素没什么影响,但是到后面就有影响了;
4.还有就是,在打印函数的时候要先让一个指针和要打印的链表的头节点产生联系,再通过这个指针来引出数据,不然就会出错;
5.上面的可能光看完全不可以理解,到时候我会补上这些图便于理解。
相信如果能上这个网站看的文章的人都不是一般人,要时刻相信自己哦!!!
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU