Request:
在前一节建设“单链表”算法库 基础上设计
1、设计一个算法,将一个带头结点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有结点逆置,即第一个结点的数据域变为an,…,最后一个结点的数据域为a1。实现这个算法,并完成测试。
提示:实现算法时,可以设计下面的函数:void Reverse(LinkList *&L)
2、已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m、n,请设计算法将L2连接到L1的后面。实现这个算法,完成测试,并分析这个算法的复杂度。
提示:实现算法时,可以设计下面的函数:void Link(LinkList &L1, LinkList &L2)
3、设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
typedef char ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LinkList;
void InitList(LinkList *&L);
bool ListEmpty(LinkList *L);
void CreateListH(LinkList *&L, ElemType a[], int n);
void CreateListT1(LinkList *&L, ElemType a[], int n);
void CreateListT2(LinkList *&L, ElemType a[], int n);
void DestoryList(LinkList *&L);
int ListLength(LinkList *L);
void DispList(LinkList *L);
bool GetElem(LinkList *L, int i, ElemType &e);
int LocateElem(LinkList *L, ElemType e);
bool ListInsert(LinkList *&L, int i, ElemType e);
bool ListDelete(LinkList *&L, int i, ElemType &e);
void split(LinkList *&L, LinkList *&L1, LinkList *&L2);
void delmaxnode(LinkList *&L);
void sortUp(LinkList *&L);
void Reverse(LinkList *&L);
void Link(LinkList *&L3, LinkList *L1, LinkList *L2);
void Increase(LinkList *L);
#endif // LIST_H_INCLUDED
#include <stdio.h>
#include "list.h"
int main(){
LinkList *Li, *Li1, *Li2, *Li3;
InitList(Li);
InitList(Li3);
ElemType x[7]= {5,8,7,2,5,4,9};
ElemType e1, e2;
/*首插法创建单链表*/
CreateListH(Li, x, 7);
printf("首插法创建单链表: ");
DispList(Li);
printf("\n");
/*判断结点中的数据域是否单向递增*/
Increase(Li);
printf("\n");
/*尾插法创建单链表*/
CreateListT2(Li, x, 7);
printf("尾插法创建单链表: ");
D