*作者:张栋
*完成时间:2015年10月9号
*问题描述:单链表的应用
①设计一个算法将一个带头节点的数据域依次为a1,a2……an的单链表的所有节点逆置,即数据域an
变成a1等等,完成测试。
②已知L1L2分别指向两个单链表的头结点,且已知其长度为m.n,设计算法将L2连接到L1的后面,完成测试并计算算法复杂度。
③设计一个算法,判断一个链表是否单调递增,完成测试
*注明:因程序中使用了前面项目所建立的算法库,所以头文件及部分函数的实现在博文中只写出一遍
*代码1:问题1 节点逆置
#include <stdio.h>
#include <malloc.h>
#include "linklist.h"
void Reverse(LinkList *&L)
{
LinkList *p=L->next,*q;
L->next=NULL;
while (p!=NULL) //扫描所有的结点
{
q=p->next; //让q指向*p结点的下一个结点
p->next=L->next; //总是将*p结点作为第一个数据结点
L->next=p;
p=q; //让p指向下一个结点
}
}
int main()
{
LinkList *L;
ElemType a[]= {1,3,5,7, 2,4,8,10};
CreateListR(L,a,8);
printf("L:");
DispList(L);
Reverse(L);
printf("逆置后L: ");
DispList(L);
DestroyList(L);
return 0;
}
*运行结果:
*代码2:问题2 单链表的连接
#include <stdio.h>
#include <malloc.h>
#include "linklist.h"
void Link(LinkList *&L1, LinkList *&L2)
{
LinkList *p = L1;
while(p->next != NULL) //找到L1的尾节点
p = p->next;