user-0 提问: C的链表建立与输出

回复:
user: user-1
content: 正好刚学习这一块，链表。

user: user-2
content: #include <stdio.h> #include <stdlib.h>  #define maxsize 100  typedef struct Lnode //初始化 {     int data;     struct Lnode *next; }Lnode;  int createLNode(Lnode **head,int n) {     Lnode *s,*r;   //s指向新节点  ，r指向尾节点     int i;     *head=(Lnode*)malloc(sizeof(Lnode)); //给头结点分配存储空间     //head->next==NULL;     //*head = s;     r = *head;     printf("请输入元素值:\n");     for(i=0;i<n;i++)     {         s = (Lnode *)malloc(sizeof(Lnode));         scanf("%d", &s->data);         r->next =s;         r = s;     }     s->next =NULL;      return 0; }   void print(Lnode *head) {     Lnode *p;     p=head->next ;     while(p!=NULL)     {         printf("%d ",p->data);         p=p->next;     }     printf("\n"); }  void free_list(Lnode *phead) {     Lnode *p, *q;      while (p) {         q = p->next;         free(p);         p = q;     } }  int main() {     int n;     Lnode *p;     printf("请输入节点个数:\n");     scanf("%d",&n);     createLNode(&p,n);     printf("该链表为：\n");     print(p);     //free(p);     free_list(p);     p = NULL;     return 0; } 供参考～ 两处错误。一个是创建链表要传二重指针进去，第二个是释放链表要逐个释放，否则会导致内存泄漏（当然程序运行完会自动释放，如果程序一直运行，楼主你这样释放会导致内存泄露）。

user: user-2
content: 引用 2 楼 focuslight 的回复:给你改了一下   #include <stdio.h>  #include <stdlib.h>  #define maxsize 100   typedef struct Lnode //初始化 { 		int data;      struct Lnode *next;  }Lnode;   int createLNode(Lnode *head, int n)  {     Lnode *s,*r;   //s指向新节点  ，r指向尾节点      int i;  //head=(Lnode*)malloc(sizeof(Lnode)); //给头结点分配存储空间   //head->next=NULL;  s = head;  printf("请输入元素值:\n");  for(i=0;i<n;i++)  {          r = (Lnode *)malloc(sizeof(Lnode));          scanf("%d",&r->data);          s->next =r;          s = r;  		 s->next =NULL;  }        	return 0;  }    void print(Lnode *head)  {      Lnode *p;      p=head->next;      while(p!=NULL)      {       printf("%d ",p->data);       p=p->next; 	 }  }   int main()   {          int n;      Lnode *p; 	  p=(Lnode*)malloc(sizeof(Lnode)); //给头结点分配存储空间  	  p->next=NULL;      printf("请输入节点个数:\n");      scanf("%d",&n);      createLNode(p, n);      printf("该链表为：\n");      print(p); 	 if(p!=NULL)      free(p);      return 0;  }    #include <stdio.h> #include <stdlib.h>  #define maxsize 100  typedef struct Lnode //初始化 {     int data;     struct Lnode *next; }Lnode;  int createLNode(Lnode **head,int n) {     Lnode *s,*r;   //s指向新节点  ，r指向尾节点     int i;     *head=(Lnode*)malloc(sizeof(Lnode)); //给头结点分配存储空间     //head->next==NULL;     //*head = s;     r = *head;     printf("请输入元素值:\n");     for(i=0;i<n;i++)     {         s = (Lnode *)malloc(sizeof(Lnode));         scanf("%d", &s->data);         r->next =s;         r = s;     }     s->next =NULL;      return 0; }   void print(Lnode *head) {     Lnode *p;     p=head->next ;     while(p!=NULL)     {         printf("%d ",p->data);         p=p->next;     }     printf("\n"); }  void free_list(Lnode *phead) {     Lnode *p, *q;      while (p) {         q = p->next;         free(p);         p = q;     } }  int main() {     int n;     Lnode *p;     printf("请输入节点个数:\n");     scanf("%d",&n);     createLNode(&p,n);     printf("该链表为：\n");     print(p);     //free(p);     free_list(p);     p = NULL;     return 0; }  供参考～  比较一下两种方法，那个是可行的的。有一个是有问题的。  因为创建链表时要传二重指针进去，否则不能把链表头带出来。

user: user-3
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-4
content: 给你改了一下   #include <stdio.h>  #include <stdlib.h>  #define maxsize 100   typedef struct Lnode //初始化 { 		int data;      struct Lnode *next;  }Lnode;   int createLNode(Lnode *head, int n)  {     Lnode *s,*r;   //s指向新节点  ，r指向尾节点      int i;  //head=(Lnode*)malloc(sizeof(Lnode)); //给头结点分配存储空间   //head->next=NULL;  s = head;  printf("请输入元素值:\n");  for(i=0;i<n;i++)  {          r = (Lnode *)malloc(sizeof(Lnode));          scanf("%d",&r->data);          s->next =r;          s = r;  		 s->next =NULL;  }        	return 0;  }    void print(Lnode *head)  {      Lnode *p;      p=head->next;      while(p!=NULL)      {       printf("%d ",p->data);       p=p->next; 	 }  }   int main()   {          int n;      Lnode *p; 	  p=(Lnode*)malloc(sizeof(Lnode)); //给头结点分配存储空间  	  p->next=NULL;      printf("请输入节点个数:\n");      scanf("%d",&n);      createLNode(p, n);      printf("该链表为：\n");      print(p); 	 if(p!=NULL)      free(p);      return 0;  }

user: user-5
content: p=head-n>ext改为p=head