设计一算法,逆置带头结点的动态单链表L
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
linklist *creatlistr()
{
// datatype elem;
int n;
linklist *head,*s,*r;
head=(linklist *)malloc(sizeof(linklist));
r=head;
printf("请输入要插入的结点的个数:");
scanf("%d",&n);
printf("请输入%d个结点:",n);
while(n--)
{
s=(linklist *)malloc(sizeof(linklist));
scanf("%d",&s->data);
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
void reverseLinklist(linklist *head)
{
linklist *y,*r,*t;
t=NULL;
r=NULL;
y=head->next;
head->next=NULL; //断开头指针
while(y!=NULL) //从第一个结点起,将后边的结点依次放到最前边,实现逆置{
t=y->next;
y->next=r;
r=y;
y=t;
}
head->next=r; //重新链接上头结点,保证最初链的完整
void show(linklist *head)
{
linklist *p;
p=head->next;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
}
int main()
{
linklist *head;
head=creatlistr();
reverseLinklist(head);
show(head);
printf("\n");
system("pause");
return 0;
}
经过codeblocks验证,完美运行。
适用于数据结构2.6 习题
更多数据结构————adam