以下部分是头文件
#ifndef __LianBiao__
#define __LianBiao__
typedef int ElemType;
typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;
int GetElem_L(LinkList L, int i, int &num);
int ListInsert_L(LinkList L, int i, int e);
void show(LinkList L);
int ListDelete_L(LinkList L, int i, int &e);
void CreateList_L(LinkList *L, int n);
void MergeList_L(LinkList La, LinkList Lb, LinkList *Lc);
void clean(LinkList L);
#endif
以下部分是相关代码的实现,后续的实现中要慢慢的引入测试用例的使用:
#include <string.h>
#include <stdio.h>
#include <stdlib.h >
#include "Lianbiao.h"
#define OK 1;
#define ERROR 0;
int GetElem_L(LinkList L, int i, int &num)
{
L = L->next;
int j = 1;
while (L && j < i)
{
L = L->next;
++j;
}
if (!L || j > i)
{
return ERROR;
}
num = L->data;
return OK;
}
int ListInsert_L(LinkList L, int i, int e)
{
int j = 0;
while (L && (j < (i - 1)))
{
L = L->next;
++j;
}
if (!L || (j > (i - 1)))
{
return ERROR;
}
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = L->next;
L->next = s;
return OK;
}
void show(LinkList L)
{
if (L == NULL)
{
return;
}
while (L->next == NULL)
{
printf("%d :yyh\n", L->data);
L = L->next;
}
}
int ListDelete_L(LinkList L, int i, int &e)
{
LinkList q = NULL;
int j = 0;
while (L->next && j < (i - 1))
{
L = L->next;
++j;
}
if (!(L->next) || j > (i - 1))
{
return ERROR;
}
q = L->next;
L->next = q->next;
e = q->data;
return OK;
}
void CreateList_L(LinkList *L, int n)
{
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
LinkList p = NULL;
for (int i = n; i > 0; --i)
{
p = (LinkList)malloc(sizeof(LNode));
p->data = i;
p->next = (*L)->next;
(*L)->next = p;
}
}
void MergeList_L(LinkList La, LinkList Lb, LinkList *Lc)
{
LinkList pa = La->next;
LinkList pb = Lb->next;
LinkList pc = La;
*Lc = pc;
while (pa && pb)
{
if (pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
free(Lb);
}
void clean(LinkList L)
{
LinkList p = NULL;
while (L->data == NULL)
{
p = L;
L = L->next;
free(p);
}
}
void main(void)
{
//LNode LNodes[4];
//LNodes[0].data = 1;
//LNodes[0].next = &LNodes[1];
//LNodes[1].data = 2;
//LNodes[1].next = &LNodes[2];
//LNodes[2].data = 3;
//LNodes[2].next = &LNodes[3];
//LNodes[3].data = 4;
//LNodes[3].next = NULL;
LinkList L = NULL;
LinkList L1 = NULL;
LinkList L2 = NULL;
CreateList_L(&L, 5);
int num = 0;
int flag = GetElem_L(L, 2, num);
printf("%d : %d\n", flag, num);
int flag1 = ListInsert_L(L, 4, 5);
printf("%d : %d\n", flag1, num);
show(L);
int flag2 = ListDelete_L(L, 3, num);
printf("%d : %d===========\n", flag2, num);
show(L);
CreateList_L(&L1, 6);
puts("L1===========");
show(L1);
MergeList_L(L, L1, &L2);
puts("L2===========");
show(L2);
clean(L);
clean(L1);
clean(L2);
show(L);
show(L1);
show(L2);
L = NULL;
L1 = NULL;
L2 = NULL;
show(L);
show(L1);
show(L2);
}