用單鏈表實現字符串的插入,插入在前一個字符串最大的字符後
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define maxsize 100000
char s1[maxsize+1],s2[maxsize+1];
typedef int Elemtype;
typedef struct Lnode
{
Elemtype data;
struct Lnode *next;
}Lnode,*LinkList;
LinkList CreateListR(char *s)
{
LinkList L,r,p;
L=(LinkList)malloc(sizeof(Lnode));
if (L==NULL)
{
printf("分配結點失敗\n");
exit(-1);
}
L->next=NULL;
r=L;
int i;
for (i=0;i<strlen(s);i++)
{
p=(LinkList)malloc(sizeof(Lnode));
if (p==NULL)
{
printf("新建結點失敗\n");
exit(-1);
}
p->data=s[i];
r->next=p;
r=p;
}
r->next=NULL;
return L;
}
void DispList(LinkList L)
{
LinkList p=L->next;
if (p==NULL) printf("空表\n");
while (p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
char Findmax(LinkList L)
{
LinkList p;
p=L->next;
char maxp=p->data;
if (p==NULL) return '\0';
while (p!=NULL)
{
if(p->data>maxp) maxp=p->data;
p=p->next;
}
return maxp;
}
LinkList Merge(LinkList L1,LinkList L2)
{
char max=Findmax(L1);
LinkList p,q,pre;
p=L1->next;q=L2->next;
if (max=='\0') return L2;
while (p->data!=max) p=p->next;
pre=p->next;
p->next=q;
while (q->next!=NULL) q=q->next;
q->next=pre;
return L1;
}
int main(int argc, char *argv[]) {
scanf("%s",s1);
getchar();
scanf("%s",s2);
LinkList L1=CreateListR(s1);
LinkList L2=CreateListR(s2);
DispList(Merge(L1,L2));
return 0;
}