單連結清單的連結
建立長度為n的單連結清單A和長度為m的單連結清單B。程式設計實作将B表連結在A表的尾端,形成一個單連結清單A。資料類型指定為字元型。
輸入
第一行為A表的長度n;
第二行為A表中的資料元素;
第三行為B表的長度m;
第四行為B表中的資料元素。
輸出
輸出為連結好後的A表中的所有資料元素。
樣例輸入
4
A B C D
6
1 2 3 4 5 6
樣例輸出
A B C D 1 2 3 4 5 6
#include<stdio.h>
#include<malloc.h>
struct LinkNode//連結清單結點
{
char data;
struct LinkNode *next;
};
struct LinkNode *InitList(int l)//建立單連結清單
{
char a;
struct LinkNode *p1,*p2,*head;//聲明頭指針和p1,p2操作指針
head=p1=p2=(struct LinkNode *)malloc(sizeof(struct LinkNode));//申請空間,并且将head,p1,p2指向這個空間
scanf("%c",&a);//用來抵消回車,輸入單連結清單長度後,會有個回車輸入,回車也是字元,是以設定一個a,用來儲存着個回車,防止将回車符儲存在單連結清單中
scanf("%c",&p1->data);//輸入第一個資料
if(l!=1)
{
for(int i=1;i<l;i++)//循環儲存單連結清單第二個到最後的所有資料
{
p2=(struct LinkNode *)malloc(sizeof(struct LinkNode));//申請一個新的空間,并且p2指向這個空間
p1->next=p2;
scanf("%c",&a);
if(a!=' '&&a!='\n')//如果輸入的不是空格或者回車,就将它儲存起來
{
p2->data=a;
p1=p2;
}
else
i--;//因為輸入的是空格或者回車,不是有效資料,重新進行則個循環,用i--和i++抵消
}
}
p2->next=NULL;
return head;
}
int main()
{
int n,m;
char a;
struct LinkNode *LA,*LB,*p;//聲明指針
scanf("%d",&n);
LA=InitList(n);//建立LA單連結清單
scanf("%d",&m);
LB=InitList(m);//建立LB單連結清單
p=LA;
while(1)//循環查找單連結清單LA,直到找到最後一個
{
p=p->next;
if(p->next==NULL)
{
p->next=LB;//将LB單連結清單接在LA的最後
break;
}
}
p=LA;
while(p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
}
/*
#include<stdio.h>
int main()
{
char a[100],b[100],k;
int n,m;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%c",&k);
if(k!=' '&&k!='\n')//k!=32&&k!=10
a[i]=k;
else
i--;
}
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%c",&k);
if(k!=' '&&k!='\n')
b[i]=k;
else
i--;
}
for(int i=0;i<n;i++)
{
printf("%c ",a[i]);
}
for(int i=0;i<m;i++)
{
printf("%c ",b[i]);
}
}
*/