想知道怎么插入最后一个结点,
比如:
5
1 2 3 4 5
6
我写的代码比较不了最后一个结点,1前面可以插入0,但是5后面插入不了6
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*Linklist;
Linklist Tail_insert(Linklist L,int a[],int i)
{
int j;
Linklist p,r;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(j=0;j<i;++j)
{
p=(Linklist)malloc(sizeof(LNode));
p->data=a[j];
p->next=NULL;
r->next=p;
r=p;
}
return L;
}
Linklist Insert(Linklist L,int a[],int k,int i)
{
int j;
j=i;
Linklist p,s;
p=(Linklist)malloc(sizeof(LNode));
s=(Linklist)malloc(sizeof(LNode));
p=L;
s->data=k;
while(1)
{
if((p->next->data)>(s->data))
{
s->next=p->next;
p->next=s;
break;
}
p=p->next;
}
return L;
}
void printfLinklist(Linklist L)
{
Linklist p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void distroyLinklist(Linklist L)
{
Linklist p;
p=L;
while(L!=NULL)
{
L=L->next;
free(p);
p=L;
}
}
int main()
{
int i,j,k,n,m;
int a[100];
i=0;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&n);
a[i]=n;
}
scanf("%d",&k);
j=i;
Linklist L;
L=Tail_insert(L,a,i);
L=Insert(L,a,k,i);
printfLinklist(L);
distroyLinklist(L);
return 0;
}
这个题比较有意思,其实就是先判断位数,再逆序输出每一位,我感觉涉及到了两个东西,所以写了一下。
代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int num,y,x1,x2,x3,x4,x5,place;
scanf("%d",&num);
place=log10((double)num)+1;//
/********** Begin **********/
y=num;
x1=y%10;
y=y/10;
x2=y%10;
y=y/10;
x3=y%10;
y=y/10;
x4=y%10;
y=y/10;
x5=y%10;
printf("%d为%d位数\n",num,place);
switch(place){
case 1:printf("顺序输出为:%d\n",x1);printf("逆序输出为:%d\n",x1);break;
case 2:printf("顺序输出为:%d,%d\n",x2,x1);printf("逆序输出为:%d,%d\n",x1,x2);break;
case 3:printf("顺序输出为:%d,%d,%d\n",x3,x2,x1);printf("逆序输出为:%d,%d,%d\n",x1,x2,x3);break;
case 4:printf("顺序输出为:%d,%d,%d,%d\n",x4,x3,x2,x1);printf("逆序输出为:%d,%d,%d,%d\n",x1,x2,x3,x4);break;
case 5:printf("顺序输出为:%d,%d,%d,%d,%d\n",x5,x4,x3,x2,x1);printf("逆序输出为:%d,%d,%d,%d,%d\n",x1,x2,x3,x4,x5);break;}
/********** End **********/
return 0;
}
修改如下,改动处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*Linklist;
Linklist Tail_insert(Linklist L,int a[],int i)
{
int j;
Linklist p,r;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(j=0;j<i;++j)
{
p=(Linklist)malloc(sizeof(LNode));
p->data=a[j];
p->next=NULL;
r->next=p;
r=p;
}
return L;
}
Linklist Insert(Linklist L,int a[],int k,int i)
{
int j;
j=i;
Linklist p,s;
//p=(Linklist)malloc(sizeof(LNode)); 多余
s=(Linklist)malloc(sizeof(LNode));
p=L;
s->data=k;
s->next=NULL; // 修改
while(p->next && p->next->data < s->data)//while(1) 修改
{
//if((p->next->data)>(s->data))修改
//{ 修改
// s->next=p->next; 修改
// p->next=s; 修改
// break; 修改
//} 修改
p=p->next;
}
if (p == L){ //修改
s->next=L->next; //修改
L->next=s; //修改
}
else{ //修改
s->next=p->next;
p->next=s;
}
return L;
}
void printfLinklist(Linklist L)
{
Linklist p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void distroyLinklist(Linklist L)
{
Linklist p;
p=L;
while(L!=NULL)
{
L=L->next;
free(p);
p=L;
}
}
int main()
{
int i,j,k,n,m;
int a[100];
i=0;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&n);
a[i]=n;
}
scanf("%d",&k);
j=i;
Linklist L;
L=Tail_insert(L,a,i);
L=Insert(L,a,k,i);
printfLinklist(L);
distroyLinklist(L);
return 0;
}