天天看點

西南科技大學OJ題 單連結清單的連結0954

單連結清單的連結

建立長度為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]);
	}
}
*/