读书人

没有头结点单链表逆置有关问题

发布时间: 2012-04-23 13:17:38 作者: rapoo

没有头结点单链表逆置问题

C/C++ code
#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;}

上边就是我写的代码
逆置函数没写单链表为空;元素为一个或两个的情况;这些先不考虑 我的键入链表都是元素数大于等于三个的
可是输出总是不对 自己感觉写的没有错误 困扰我一下午的问题了想的头都大了 来求助的

[解决办法]
C/C++ code
//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); 

读书人网 >C语言

热点推荐