【链表】逆序输出

来源:互联网 发布:域名劫持转发教程 编辑:程序博客网 时间:2024/06/06 07:19
#include <iostream>#include <string>using namespace std;#define maxsize 100#define null 0typedef 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类型读出串,然后借用逗号“,”标志,分割出字符,最后再创建链表【头插法】,输出即可。

代码:


0 0
原创粉丝点击