奇怪!指针也不能正确带回参数值。。。。。。。。。。。。。
#include <stdio.h>
#include <stdlib.h>
struct NODE
{
int num;
struct NODE *next;
};
struct NODE *create(void) // 创建链表
{
int n = 0;
struct NODE *head = NULL;
struct NODE *p1, *p2;
p1 = p2 = (struct NODE *)malloc(sizeof(struct NODE));
scanf("%d", &p1->num);
while (p1->num != 0)
{
n++;
if (1 == n)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct NODE *)malloc(sizeof(struct NODE));
scanf("%d", &p1->num);
}
p2->next = NULL;
return head;
}
void destory(struct NODE *LinkList) // 释放链表
{
if (&LinkList == NULL)
return;
struct NODE *p1, *p2;
p1 = LinkList;
while(p1->next != NULL)
{
p2 = p1->next;
free(p1);
p1 = p2;
}
}
void Reverse(struct NODE *LinkList) // 求链表的逆序
{
if (LinkList == NULL || LinkList->next == NULL)
return ;
struct NODE *p, *p1, *p3;
p = p3 = LinkList;
p1 = LinkList->next;
while(p1->next != NULL)
{
LinkList->next = p1->next;
p = p1;
p1->next = p3;
p3 = p1;
p1 = LinkList->next;
}
LinkList->next = NULL;
p1->next = p3;
p = p1;
LinkList = p;
LinkList->next = p->next; //???????????????????
// return LinkList;
}
void Print(struct NODE *LinkList) // 打印链表
{
struct NODE *p;
p = LinkList;
while (p != NULL)
{
printf("%d\t", p->num);
p = p->next;
}
printf("\n");
}
void main(void)
{
struct NODE *list;
list = create();
Print(list);
Reverse(list);
Print(list);
destory(list);
}
如题,本程序为实现一个链表的逆序,在上面的?????????????处linklist的值是正确的,但传给主函数的list就不对了。
输入:1 2 3 4 5 0
Reverse()中linklist:为5->4->3->2->1->NULL
但到了主函数中list: 1->NULL;
请各位高手看看是怎么回事?