动态建立链表和链表排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这是动态建立链表和链表排序,复制,vc6.0验证过
#include
struct node
{
int a;
node *next;
};
node *initLink(int size)//初始化节点链表
{
node *p=new node;
p->next = NULL;
cout<<"输入头结点的值:"<
node *h=p;
for (int i=1; i
p->next=new node;
p->next->next = NULL; //这里p->next->next=NULL 了之后
cout<<"输入新节点的值:"<
p=p->next;
}
//p->next=NULL; //就不用在这里加一句p->next=NULL了
return h; //返回头指针
};
void print(node *p)
{
while (p!=NULL)
{
cout<
p=p->next;
}
cout<
node *sort(node *head)
{
node *head2=NULL; //排序原理为:定义两个指针一个是新建链表的头指针,
//一个是新建链表尾指针,头指针(head2)不移动,另外一个指针(p6)当做尾指针一直往后移,移一下
//增加一个节点,直到最后
// cout<<"新建一个链表的头结点值为1"<
node *p3=head; //p3保存原来头结点
node *p_min; //p_min始终保存最小指针
node *p4,*p5,*p6;
p6=head2;
while (head!=NULL)
{
p_min=head;
p3=p_min;
while(p3!=NULL)
{
p4=p3; //p4保存p3指针的前驱
p3=p3->next; //p3始终往下走直到找到小于p_min的节点为止
if (p3!=NULL&&p3->a
{ //为NULL就会报错
p5=p4; //p5保存前驱指针p4,
p_min=p3; //p_min 保存p3
}
}
if (p6==NULL) //如果为新建的第一个节点,让两个指针都指向最小的那个节点,头结点嘛,head2也是要指向它的
{
head2=p_min;
p6=p_min;
}
else
{
p6->next=p_min;//不是的话就让p6指向最小结点p_min
p6=p6->next; //往后移
}
if (p_min==head) //如果最小结点就是原来的头结点,还要
{ //让head=head->next,往后移(去掉该节点)
head=head->next;
p_min=head; //接着从头开始,p_min指向head,p3指向head,再来一遍
p3=p_min;
}
else
{
p5->next=p_min->next;//(去掉该节点)//节省两行代码,10月20号
}
}
p6->next=NULL; //最后让p6->next = NULL;可以使结束程序
return head2;
}
node *copy(node *head)
{
node *p1=head;
node *n_head=new node;//copy函数开始时新建一个节点
node *p2=n_head;
while (p1!=NULL)
{
if (p1==head) // 判断如果为第一个节点,
{
p2->a=p1->a;
p1=p1->next;
}
else
{
p2->next=new node;
p2->next->a=p1->a;
p2=p2->next;
p1=p1->next;
}
}
p2->next=NULL;
return n_head;
}
node *Copy(node *head)
{
node *h=new node,*move,*t=new node;
h=head; //我靠,节点赋值10月21号
move=h; //这是指针指向
t=head->next;
for(t=head->next;t!=NULL;t=t->next )
{
move->next=new node;
move->next->a=t->a;
// move->next->next=NULL;
move=move->next;
}
move->next=NULL;//移到这里的话,效率高点
return h;
}
void main ()
{
node *h1;
node *h2=NULL;
h1=initLink(5);
// print(h1);
// h2=sort(h1);
// print(h2);
node *cpy;
cpy=copy(h1);
print(cpy);
cout<
print(d);
}