满意答案
junjie8510
2014.01.29
采纳率:49% 等级:12
已帮助:7663人
#include
#include
#define N 20
/* User Code Begin(Limit: lines<=5, lineLen<=60, 考生可在本行后添加代码、仅5行、行长<=60字符,功能是节点类型Link定义) */
struct Link
{
int data;
struct Link *next;
};
/* 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
{
if (oLink[0][i] != oLink[1][N-1-i])
{
printf("Error, Link not reverse!\n");
return ;
}
}
}
}
/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
struct Link* creatLink() /* 创建新链表 */
{
struct Link *h,*p;
h=(struct Link*)malloc(sizeof(struct Link));
int i;
printf("请输入第 1 个结点的数据:");
scanf("%d",&h->data);
h->next=NULL;
for(i=2; i<=N; i++)
{
p=(struct Link*)malloc(sizeof(struct Link));
printf("请输入第 %d 个结点的数据:",i);
scanf("%d",&p->data);
p->next=h;
h=p;
}
return h;
}
struct Link* reverseLink(struct Link *Head) /* 反转链表 */
{
struct Link *p,*q,*h=Head;
p=Head->next;
h->next=NULL;
for(; p!=NULL; )
{
q=p;
p=p->next;
q->next=h;
h=q;
}
return h;
}
02分享举报