#include <iostream>
#include <string>
using namespace std;
#define maxsize 100
#define null 0
typedef struct node
{
int data;
struct node * next;
}node, *linklist;
int strtonum(string s)
{
int i=0,len=s.length();
int num=0;
int n=1;
for(i=len-1;i>=0;i--)
{
num=num+(s[i]-'0')*(n);
n=n*10;
}
return num;
}
int main()
{
string s;
getline(cin,s);
int a[maxsize]={0};
int pos[maxsize]={0};
int k=0;
int i=0,len=s.length();
for(i=0;i<len;i++)
{
if(s[i]==',')
{
pos[k]=i;
k++;
}
}
a[0]=strtonum(s.substr(0,pos[0]));
for(i=0;i<k-1;i++)
{
a[i+1]=strtonum(s.substr(pos[i]+1,pos[i+1]-pos[i]-1));
}
a[i+1]=strtonum(s.substr(pos[i]+1,len-1-pos[i]));
int lena=k+1;
linklist phead;
linklist p;
linklist r=(linklist)malloc(sizeof(struct node));
r->next=null;
phead=r;
for(i=0;i<lena;i++)
{
p=(linklist)malloc(sizeof(struct node));
p->data=a[i];
p->next=r->next;
r->next=p;
}
linklist pw=phead;
for(i=0;i<lena-1;i++)
{
pw=pw->next;
cout<<pw->data<<",";
}
cout<<pw->next->data<<endl;
return 0;
}
逆序链表输出
描述:
输入一个单向链表,将链表逆序后输出各结点的值。
链表结点结构定义如下:
typedef struct tagListNode
{
int value;
struct tagListNode *next;
}ListNode;
运行时间限制: 60 Sec
内存限制: 256 MByte
输入:
顺序输入链表的各结点,用逗号(",")作为结点数据的分隔符;
例如:链表1->2->3->4->5,输入为:"1,2,3,4,5"
输出:
逆序后链表的各结点,用逗号(",")作为结点数据的分隔符;
例如上述链表逆序后为5->4->3->2->1,输出为:"5,4,3,2,1"
样例输入:
1,2,3,4,5
样例输出:
5,4,3,2,1
问题分析:
最简单的当然是头插法,输入1,2,3,4,5,
从head点开始输出,恰好就是5,4,3,2,1
但本题的问题是,输入是用逗号“,”隔开的,cin输入是识别不了单个的,所以只能用string类型读出串,然后借用逗号“,”标志,分割出字符,最后再创建链表【头插法】,输出即可。
代码: