#include "stdafx.h"
#include<stdlib.h>
#include<stdio.h>
#define ERROR 0
#define OK 1
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkList;
int getElem(LinkList L, int i, int &e)
{
LinkList p = L->next;
int j = 1;
while (p&&j < i)
{
p = p->next;
j++;
}
if (!p || j > i)
{
return ERROR;
}
e = p->data;
return OK;
}
int listInsert(LinkList &L, int i, int e)
{
LinkList p = L;
int j = 0;
while (p&&j < i-1)
{
p = p->next;
j++;
}
if (!p||j>i-1)
{
return ERROR;
}
LinkList s = (LinkList)malloc(sizeof(LNode));
if (!s)
{
return ERROR;
}
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
int listDelete(LinkList &L, int i, int &e)
{
LinkList p = L;
int j = 0;
while (p->next&&j < i - 1)
{
p = p->next;
j++;
}
if (!(p->next) || j > i - 1)
{
return ERROR;
}
LinkList q = p->next;
e = q->data;
p->next = q->next;
free(q);
return OK;
}
int createList(LinkList &L, int n)
{
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
LinkList q = L;
for (int i = 1; i <= n; i++)
{
LinkList s = (LinkList)malloc(sizeof(LNode));
if (!s)
{
return ERROR;
}
scanf_s("%d", &s->data);
q->next = s;
s->next = NULL;
q = s;
}
return OK;
}
int mergerList(LinkList &La, LinkList &Lb, LinkList &Lc)
{
LinkList pa = La->next;
LinkList pb = Lb->next;
LinkList pc = Lc = La;
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);
return OK;
}
int main()
{
int e;
LinkList list1,list2,list3;
createList(list1, 7);
for (int i = 1; i <= 7; i++)
{
getElem(list1, i, e);
printf("%d ", e);
}
printf("\n");
listInsert(list1, 8, 100);
for (int i = 1; i <= 8; i++)
{
getElem(list1, i, e);
printf("%d ", e);
}
printf("\n");
listDelete(list1, 1, e);
for (int i = 1; i <= 7; i++)
{
getElem(list1, i, e);
printf("%d ", e);
}
printf("\n");
createList(list2, 7);
for (int i = 1; i <= 7; i++)
{
getElem(list2, i, e);
printf("%d ", e);
}
printf("\n");
mergerList(list1, list2, list3);
for (int i = 1; i <= 14; i++)
{
getElem(list3, i,e);
printf("%d ", e);
}
printf("\n");
return 0;
}