游客 Signup | Login
中文 | En

2766 - 单链表输出

从键盘输入一组数据建立单链表,然后输出奇数位上的元素。


<br />

Input

第一行输入单链表长度n。

第二行输入字符串。

Output

第一行:输出各奇数位元素

Examples

Input

7
ABCDEFG

Output

ACEG

Hint

首先根据字符串建立单链表,然后输出奇数位元素。

Solution C

///*数据元素类型ElemType取整型int。
//按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):
//创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在20之内;
//打印(遍历)该线性表(依次打印出表中元素值);
//在线性表中查找第i个元素,并返回其值;
//在线性表中第i个元素之前插入一已知元素;
//在线性表中删除第i个元素;
//求线性表中所有元素值(整数)之和;*/
//#include<stdio.h>
//#define MAXSIZE 10
//typedef struct        //线性表结构定义
//{
//	char elem[MAXSIZE];
//	int last;
//}SeqList;
//
//void Print(SeqList L)   //打印
//{
//	int i;
//	for(i=0;i<MAXSIZE;i++)
//	{
//		printf("%d  ",L.elem[i]);
//	}
//}
//
//void Print1(SeqList L)   //打印
//{
//	int i;
//	for(i=0;i<L.last;i=i+2)
//	{
//		printf("%c  ",L.elem[i]);
//	}
//}
//
//int GetData(SeqList L,int i)    //查找
//{
//	if(i<=MAXSIZE)
//		return(L.elem[i-1]);
//	else
//		return(0);
//}
//
//int InsList(SeqList *L,int i,int e)    //插入
//{ 
//	int k;
//	if ((i<1)||(i>L->last))
//	{
//		printf("插入位置不合法");
//		return 0;
//	}
//	if(L->last>MAXSIZE)
//	{
//		printf("表已满,无法插入");
//		return 0;
//	}
//	for(k=L->last;k>=i-1;k--)
//		L->elem[k+1]=L->elem[k];
//	L->elem[i-1]=e;
//	L->last++;
//	return 1;
//}
//
//
//int DelList(SeqList *L,int i,int *e)  //删除
//{
//	int k;
//	if((i<1)||(i>L->last+1))
//	{
//		printf("删除位置不合法");
//		return 0;
//	}
//	*e=L->elem[i-1];
//	for(k=i;i<=L->last;k++)
//		L->elem[k-1]=L->elem[k];
//	L->last--;
//	return 1;
//}
//
//
//int sum(SeqList L)   //求和
//{
//	int i,sum=0;
//	for(i=0;i<MAXSIZE;i++)
//	{
//		sum=sum+L.elem[i];
//	}
//	return(sum);
//}
//
//
//
//
//
///////////////////////////////////////////
//int main()
//{
//	int i=0,e;
//	SeqList L;
//	L.last=0;
//	//for(i=0;i<MAXSIZE;i++)
//	//{
//	//	L.elem[i]=0;
//	//}
//	i=0;
//	int n;
//	scanf("%d",&n);
//	gets(L.elem);
//	/*printf("请输入线性表\n");*/
//	//while(i<n)
//	//{
//	//	scanf("%c",&(L.elem[i]));
//	//	//gets(L.elem);
//	//	i++;
//	//	L.last++;
//	//}
//	Print(L);
//	Print1(L);
//
//
//
//	//printf("查找第i个元素,请输入i的值\n");
//	//scanf("%d",&i);
//	//if(i>MAXSIZE)
//	//	printf("输入i值有误");
//	//else
//	//	printf("%d",GetData(L,i));
//	//printf("在第i个元素之前插入元素e,请输入i和e的值");
//	//scanf("%d%d",&i,&e);
//	//InsList(&L,i,e);
//	//Print(L);
//
//	//printf("删除第i个元素,请输入i值");
//	//scanf("%d",&i);
//	//DelList(&L,i,&e);
//	//Print(L);
//	//printf("删除的元素是%d",e);
//
//	//printf("线性表中所有元素值(整数)之和为%d",sum(L));
//
//
//
//	return 0;
//}


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define OK   1
#define ERROR  0
#define TRUE 1
#define FALSE 0



typedef char ElemType;
typedef struct Node    /*结点类型定义*/ 
{ 
	ElemType data;
	struct Node  * next;
}Node, *LinkList;  /* LinkList为结构指针类型*/

void init_linklist(LinkList *l)/*对单链表进行初始化*/
{
	*l=(LinkList)malloc(sizeof(Node)); 
	(*l)->next=NULL;
}

void CreateFromTail(LinkList L)
{ 
	Node *r, *s;
	char c;
	int   flag =1; /*设置一个标志,初值为1,当输入"$"时,flag为0,建表结束*/
	r=L;                /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
	while(flag)         /*循环输入表中元素值,将建立新结点s插入表尾*/
	{
		scanf("%d",&c);
		if(c != -1)
		{
			s=(Node*)malloc(sizeof(Node));
			s->data=c;
			r->next=s;
			r=s;
		}
		else
		{
			flag=0;
			r->next=NULL;   /*将最后一个结点的next链域置为空,表示链表的结束*/
		}
	}   
} 

void creatList(LinkList L,char ch[],int n)
{
	Node *pre,*s;
	
	pre =L;
	//gets(ch);
	for (int i=0;i<n;i++)
	{
		
		s=(Node*)malloc(sizeof(Node));   /*申请一个新的结点S */
		s->data=ch[i];                       /*值e置入s的数据域*/
		//s->next=pre->next;				/*修改指针,完成插入操作*/
		pre->next=s;
		pre = s;
	}
	pre->next=NULL;
}
int InsList(LinkList L,int i,ElemType e)
	/*在带头结点的单链表L中第i个位置插入值为e的新结点s*/
{  
	Node *pre,*s;
	int k;
	pre=L;  
	k=0;                     /*从"头"开始,查找第i-1个结点*/
	while(pre!=NULL&&k<i-1)  /*表未查完且未查到第i-1个时重复,找到pre指向第i-1个*/ 
	{ 
		pre=pre->next;
		k=k+1; 
	}									/*查找第i-1结点*/
	if(!pre)      /*如当前位置pre为空表已找完还未数到第i个,说明插入位置不合理*/ 
	{ 
		printf("插入位置不合理!");
		return ERROR;
	}
	s=(Node*)malloc(sizeof(Node));   /*申请一个新的结点S */
	s->data=e;                       /*值e置入s的数据域*/
	s->next=pre->next;				/*修改指针,完成插入操作*/
	pre->next=s;
	return OK;
}

int main()
{
	LinkList l;
	Node *p;
	int flag=0;
	int i;
	char c;
	init_linklist(&l);		
	//printf("请输入链表数据,以$结束!\n");
	//CreateFromTail(l);
	/*p = l->next;
	while(p!=NULL)
	{
		printf("%c\n",p->data);
		p=p->next;
	}*/
	//printf("请输入插入的位置和元素:\n");
	int n;
	
	scanf("%d",&n);
	char ch[20];
	scanf("%s",ch);
	creatList(l,ch,n);
	/*for (i=1;i<=n;i++)
	{
	scanf("%c",&c);
	InsList(l,i,c);
	}*/
	/*scanf("%d,%c",&i,&c);
	flag=InsList(l, i, c);*/
	/*if(flag)
		printf("插入操作成功!\n");
	else
		printf("插入操作失败!\n");*/
	p = l->next;
	for (int i=1;i<=n,p;i++)
	{
		printf("%c",p->data);
		p=p->next;
		if (p)
		{
			p=p->next;
		}
	}
	return 1;
}

Solution C++

#include<malloc.h>
#include<iostream>
using namespace std;

typedef struct Node
{
	char data;
	struct Node *next;
}Node, *Linklist;

void InitList(Linklist *L)
{
	*L =(Linklist)malloc(sizeof(Node));
	(*L)->next = NULL;
}
	
void Create_rear(Linklist L,int n)
{
	Node *s,*r;
	char c;
	bool flag =true;
	r=L;
	for(int i=0;i<n;i++)
	{
		cin>>c;
		if(i!=n)
		{
			s=(Node*)malloc(sizeof(Node));
			s->data = c;
			r->next = s;
			r = s;
		}
		else
		{
			flag=0;
			r->next=NULL;
		}
	}
	return;
}
	


void Out_Put(Linklist L,int n)
{
	Node *p;
	p=L;
	bool flag=true;
	for(int i=0;i<n;i++)
	{
		p=p->next;
		if(flag)
		{
			cout<<p->data;
			flag=false;
		}
		else
			flag=true;
	}

}

int main()
{
	Linklist L;
	int n;
	cin>>n;
	InitList(&L);
	Create_rear(L,n);
	Out_Put(L,n);
	return 0;
}

Hint

首先根据字符串建立单链表,然后输出奇数位元素。

Time Limit 10 seconds
Memory Limit 128 MB
Discuss Stats
上一题 下一题