没有头结点单链表逆置问题
#include<stdio.h>#include<stdlib.h>typedef int datatype;//结构体创建typedef struct node{ datatype data; struct node *next;} linklist;//头插法创建链表linklist *createheadlist(){ linklist *l=NULL; linklist *s; int x; scanf("%d",&x); while(x!=-1) { s=(linklist *)malloc(sizeof(linklist)); s->data=x; s->next=l; l=s; scanf("%d",&x); } return l;}void reverse(linklist *l){ linklist *p,*q; p=l; l=NULL; while(p!=NULL) { q=p->next; p->next=l; l=p; p=q; }}void show(linklist *l){ linklist *p; p=l; int j=1; if (p==NULL) printf("链表为空"); else { printf("\n链表为(【序号】 数据 ):\n\n"); while (p) { printf("【%d】 %d ",j,p->data); p=p->next; j++; } }}int main(){ linklist *l; l=createheadlist(); show(l); reverse(l); show(l);return 0;}//reverse 会改变头部,所以必须返回一个头结点或者用指向 linklist*的指针.linklist* reverse(linklist *l){ linklist *p,*q; p=l; l=NULL; while(p!=NULL) { q=p->next; p->next=l; l=p; p=q; } return l;}调用l=reverse(l);