请问错在哪里?怎么改?
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
}LinkList,*pLinkList;
pLinkList Create_LinkList();
void reverse_LinkList(pLinkList);
int main()
{
pLinkList H;
H = Create_LinkList();
for(int i = 0;i<3;i++)
{
pLinkList T;
T = (pLinkList)malloc(sizeof(LinkList));
T->data = i;
H->next = T;
H = H->next;
}
reverse_LinkList(H);
return 0;
}
pLinkList Create_LinkList()
{
pLinkList H;
H = (pLinkList)malloc(sizeof(LinkList));
if(H)
{
H->next = NULL;
}
return H;
}
void reverse_LinkList(pLinkList H)
{
pLinkList p,q;
p = H->next;
H->next = NULL;
while(p)
{
q = p;
p = p->next;
q->next = H->next;
H->next = q;
}
}
好像是while循环里的问题
而且你的H表意不明,按照你的意思,H应该是链表头,但是你在创建链表的同时却不停的在加入新元素时将加入的元素赋给H。另外,reverse函数中的p=H->next,根据我刚刚说的,H本身就是队尾,H->next是一个未定义的地址,你又把它赋值给p,所以p一开始就已经不是链表的一部分(可能为0(NULL)也可能不是,因为你的链表接点是malloc出来的而且没初始化所有成员变量为0),再while(p)就会出问题
好像还是无法运行
追答#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
} LinkList, *pLinkList;
pLinkList Create_LinkList();
void reverse_LinkList(pLinkList);
void print_LinkList(pLinkList);
int main()
{
pLinkList H, p;
H = Create_LinkList();
p = H;
for (int i = 0; i < 3; i++)
{
pLinkList T;
T = (pLinkList)malloc(sizeof(LinkList));
T->data = i;
p->next = T;
p = p->next;
}
print_LinkList(H);
reverse_LinkList(H);
print_LinkList(H);
return 0;
}
pLinkList Create_LinkList()
{
pLinkList H;
H = (pLinkList)malloc(sizeof(LinkList));
if (H)
{
H->next = NULL;
}
return H;
}
void reverse_LinkList(pLinkList H)
{
pLinkList p, q;
p = H->next;
H->next = NULL;
while (p)
{
q = p;
p = p->next;
q->next = H->next;
H->next = q;
}
}
void print_LinkList(pLinkList p)
{
for (p = p->next; p != NULL; p = p->next)
{
printf("%d ", p->data);
}
printf("\n");
}