您的位置:首页 > 其它

第四周项目3(1)-单链表应用 逆置单链表

2016-10-20 10:14 253 查看
问题及代码:

/*

copyright (t) 2016,烟台大学计算机学院

*All rights reserved.

*文件名称:1.cpp

*作者:车金阳

*完成日期:2016年10月20日

*版本号:v1.0

*问题描述:设计一个算法,将一个带头结点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有结点逆置,即第一个结点的数据域变为an,…,最后一个结点的数据域为a1。实现这个算法,并完成测试。

*输入描述:无

*程序输出:逆置后的单链表中的各节点

*/

linklist.h:

#include <stdio.h>

#include <malloc.h>

#include "linklist.h"

void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表

{

LinkList *s,*r; //头指针*s与增加的尾指针*r

int i;

L=(LinkList *)malloc(sizeof(LinkList));

r=L;

for(i=0;i<n;i++)

{

s=(LinkList *)malloc(sizeof(LinkList));

s->data=a[i];

r->next=s;

r=s;

}

r->next=NULL; //到尾

}

void DispList(LinkList *L) //输出单链表

{

LinkList *p=L->next;

while(p!=NULL)

{

printf("%d ",p->data);

p=p->next;

}

printf("\n");

}

void Reverse(LinkList *&L) //逆置单链表

{

LinkList *p,*q;

p=L->next; //p指针始终指向尾节点(开始指向头节点)

L->next=NULL;

while(p!=NULL) //扫描节点

{

q=p->next; //q指向p节点的后继节点

p->next=L->next; //p节点作为第一个数据节点

L->next=p; //插入

p=q; //p指向下一节点,完成“跟随”

}

}

main.cpp:

#include
<stdio.h>

#include <malloc.h>

#include "linklist.h"

int main()

{

LinkList *l;

ElemType a[8]={1,2,3,4,5,6,7,8};

CreateListR(l,a,8);

printf("逆置前单链表各节点为:\n");

DispList(l);

Reverse(l);

printf("逆置后单链表各节点为:\n");

DispList(l);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: