2011-08-23 141 views
0

尝试打印该列表向后C:打印链表向后

用户输入10个字符,程序打印出在原始顺序10个字符,然后以相反的顺序。

感谢你们我想通了这个问题,为什么它不会在常规顺序打印,现在我有一些麻烦它以相反的顺序打印..

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

#define strsize 30 

typedef struct member 
{ 
    int number; 
    char fname[strsize]; 
    struct member *next; 
} RECORD; 

RECORD* insert (RECORD *it); 
RECORD* print(RECORD *it, int j); 

int main (void) 
{ 
    int i; 
    double result; 
    RECORD *head, *p; 
    head=NULL; 
    result=10; 

    for (i=1; i<=result; i++) 
     head=insert (head); 
    print (head, result); 

    return 0; 

} 

RECORD* insert (RECORD *it) 
{ 

    RECORD *cur, *q; 
    int num; 
    char junk; 
    char first[strsize]; 
    printf("Enter a character:"); 
    scanf("%s", &first); 

    cur=(RECORD *) malloc(sizeof(RECORD)); 

    strcpy(cur->fname, first); 
    cur->next=NULL; 

    if (it==NULL) 
     it=cur; 
    else 
    { 
     q=it; 
     while (q->next!=NULL) 
      q=q->next; 
     q->next=cur; 
    } 

    return (it); 
} 

RECORD* print(RECORD *it, int j) 
{ 
    RECORD *cur; 
    cur=it; 
    int i; 
    for(i=1;i<=j;i++) 
    { 
     printf("%s \n", cur->fname); 
     cur=cur->next; 

     //my solution for printing it backwards.. 

     void print(node *it) 
     { 
      if(it!=NULL) 
      { 
       print(it->next); 
       printf("%s-->",it->number); 
      } 
     } 

     return; 
    } 
} 
+3

工作,这将是有用的,如果你能具体包括问题是什么。换句话说,而不是说“我无法得到它以相反的顺序打印”,认为解释究竟是怎么了。例如:“这只是打印第2个字符”,或“我试图扭转链表,但我得到的字符按随机顺序”。 –

+0

那究竟有什么问题呢?你的'print()'函数对我来说看起来很好。 –

+2

“tsil deknil”如何? –

回答

2

你有几个“东西”的名称去print

  • 原型:RECORD* print(RECORD *it, int j);
  • 一个电话,里面mainprint (head, result);
  • 函数定义:RECORD* print(RECORD *it, int j) {
  • 嵌套函数定义:void print(node *it) {

前三个是一致的,但最后一个是完全错误的。

另外
标准C不允许嵌套函数。
类型node没有定义。
你仍然需要在你的缩进:)

+0

哈哈再次感谢:) – Erica

+0

我将如何绕过该嵌套功能? – Erica

+0

首先给它一个不同的名字;然后将其移出(剪切/粘贴)封闭函数。如果需要调整的代码,你准备好了更多的乐趣:) – pmg