[原创]链表逆置
题目:将一个有头结点的链表逆置我写的时候用-1做为结束标记。我用了Head做为辅助头结点。有兴趣的去看看。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}Node,*LinkList;
void CreateList(LinkList *head)
{ LinkList p,q;
int x;
if((*head=(Node *)malloc(sizeof(Node)))==NULL) exit(1);
(*head)->next=NULL;
q=(*head);
printf("please input data:\n");
scanf("%d",&x);
do{
if((p=(Node *)malloc(sizeof(Node)))==NULL) exit(1);
p->data=x;
p->next=NULL;
q->next=p;
q=p;
p=NULL;
printf("please input number:\n");
fflush(stdin);
scanf("%d",&x);
}while(x!=-1);
}
void Reverse(LinkList head)
{LinkList p,q,s=NULL,Head;
int count=0,i;
p=head->next;
while(p)
{ count++;
p=p->next;
}
p=head->next;
if((Head=(Node *)malloc(sizeof(Node)))==NULL) exit(1);
Head->next=p;
head->next=NULL;
for(i=0;i<count;i++)
{ p=Head->next;
Head->next=p->next;
p->next=NULL;
if(s==NULL)
s=p;
else
{ p->next=s;
s=p;
}
}
head->next=s;
free(Head);
}
void Print(LinkList head)
{ LinkList p;
p=head->next;
while(p)
{ printf("%d\t",p->data);
p=p->next;
}
}
main()
{ LinkList head;
CreateList(&head);
Print(head);
Reverse(head);
printf("\n");
Print(head);
}
搜索更多相关的解决方案:
链表
----------------解决方案--------------------------------------------------------
热情帮我修改后的
大家将函数void Reverse(LinkList head)换成下面的。以下是热情写的。他写的比我好多了。我推荐大家看他的 void Reverse(LinkList head) { LinkList p,q,r; p=head->next; q=p->next; while(q!=NULL) { r=q->next; q->next=p; p=q; q=r; } head->next->next=NULL; head->next=p;
}
----------------解决方案--------------------------------------------------------