奇怪的链表问题 for循环无效!
#include<stdio.h>#include<stdlib.h>
#define N 20
/* User Code Begin(Limit: lines<=5, lineLen<=60, 考生可在本行后添加代码、仅5行、行长<=60字符,功能是节点类型Link定义) */
struct Link
{
struct Link *next;
int data;
};
/* User Code End(考生添加代码结束) */
void dispLink(struct Link *Head); /* 根据给定的链首Head,显示整个链表中的数据,同时检查两次使用的链表是否刚好反序 */
/* User Code Begin(Limit: lines<=2, lineLen<=60, 考生可在本行后添加代码、仅2行、行长<=60字符,功能是用户自定义函数的原型声明) */
struct Link*creatLink();
struct Link*reverseLink(struct Link*head);
/* User Code End(考生添加代码结束) */
int main(void)
{
struct Link *Head;
Head = creatLink(); /* 创建新链表 这一点还是可以看出函数的名字,们没有传参 拿自己不是要在里面定义一个 然后返回*/
printf("\nbefore:");
dispLink(Head);
Head = reverseLink(Head); /* 反转链表 */
printf("\nafter:");
dispLink(Head);
return 0;
}
void dispLink(struct Link *Head)
{
static struct Link *oLink[2][N];
static int callNumber = -1;
int i = 0;
callNumber++;
if (callNumber > 1)
{
printf("Error, call invalid!\n");
return ;
}
while (Head != NULL)
{
oLink[callNumber][i] = Head;
i++;
printf("%d ", Head->data);
Head = Head->next;
}
printf("\n");
if (1 == callNumber)
{
for (i=0; i<N; i++)
{
if (oLink[0][i] != oLink[1][N-1-i])
{
printf("Error, Link not reverse!\n");
return ;
}
}
}
}
/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
struct Link*creatLink()
{
int n=0;
struct Link *head,*p1,*p2;
p1=p2=(struct Link*)malloc(sizeof(struct Link));
p1->data=n;
head=NULL;
while(n<N-1)
{
if(head==NULL)
{
head=p1;
}
else
{
p2->next=p1;
p2=p1;
}
p1=(struct Link*)malloc(sizeof(struct Link));
p1->data=n+1;
n++;
}
p2->next=p1;
p2=p1;
p2->next=NULL;
return head;
}
struct Link*reverseLink(struct Link*head)
{
int a[20],i;
struct Link *p1,*p2;
p2=p1=head;
for(i=0;i<20;i++,p1=p1->next)
{
a[i]=p1->data;
}
for(i=19;i>-1;i--,p2=p2->next)
{
p2->data=a[i];
}
return head;
}
这个程序的主要功能是将一个链表反转输出 先要自己建立一个链表;
但是很奇怪的是第一次按正常顺序输出链表的时候就将head指到了链表的末尾,后来应为自己没有注意到这个问题,就按照head还是指向最前面的方法将整个链表的所有元素反转了一遍。(并没有将链表反转) 但是输出的确是正确的!大家可以试一下 照理论来说应该是乱码啊 head再往后面指应该都是未知数了;
还有一个很奇怪的问题,也许跟上个问题有关。就是
for(i=0;i<20;i++,p1=p1->next)
{
a[i]=p1->data;
}
这个for在调程的时候自己就运行一次就跳出来了 但是i确实等于20了···
太奇怪了 太奇怪!